Skip to content

Stablize Notifications Feature #702

Stablize Notifications Feature

Stablize Notifications Feature #702

name: Update Chat snapshots
on:
pull_request:
types: [labeled]
# cancel workflow when a newer version of the workflow is triggered on the same github ref
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
precondition:
name: Determine if this workflow is applicable
runs-on: ubuntu-latest
permissions:
pull-requests: write
outputs:
met: ${{ steps.label.outputs.found || steps.workflow_dispatch.outputs.found }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Use a machine account when checking out. This is to workaround the issue where GitHub
# actions, when using the default account, cannot trigger other actions.
# This machine account is only for this PAT, pwd was created and thrown away
# If an update is needed, create a new account, add access to the repo and generate a new PAT
token: ${{ secrets.MACHINE_ACCOUNT_PAT }}
- name: Found required label
id: label
if: ${{ github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'update_chat_snapshots') }}
env:
# Required for running `gh`.
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "found=true" >> $GITHUB_OUTPUT
gh pr edit ${{ github.event.number }} --remove-label update_chat_snapshots
get_matrix:
name: Set CI flavors
needs: precondition
if: needs.precondition.outputs.met
runs-on: ubuntu-latest
permissions: read-all
outputs:
matrix: ${{ steps.get-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Use Node.js v20.x
uses: actions/setup-node@v4
with:
node-version: '20.x'
- id: get-matrix
run: echo "matrix=$(node ./common/scripts/workflow-read-matrix.mjs)" >> $GITHUB_OUTPUT
chat_composite:
needs: [precondition, get_matrix]
if: needs.precondition.outputs.met
name: Update packages/react-composites ChatComposite browser test snapshots
runs-on: ubuntu-latest
permissions: read-all
strategy:
matrix: ${{ fromJSON(needs.get_matrix.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Use a machine account when checking out. This is to workaround the issue where GitHub
# actions, when using the default account, cannot trigger other actions.
# This machine account is only for this PAT, pwd was created and thrown away
# If an update is needed, create a new account, add access to the repo and generate a new PAT
token: ${{ secrets.MACHINE_ACCOUNT_PAT }}
- name: Checkout branch if on a PR
if: ${{ github.event_name != 'workflow_dispatch' }}
# On the `pull_request` event, actions/checkout@v4 leaves the local checkout in a detached head state.
# Explicitly checkout the target branch so we can push later.
run: git checkout ${{ github.event.pull_request.head.ref }}
- name: Setup bot git information
# User id of github actions bot. See https://api.github.com/users/better-informatics%5Bbot%5D
run: |
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
- name: Use Node.js v20.x
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Install rush
run: npm install -g @microsoft/rush@$(jq -r '.rushVersion' "rush.json")
- name: Install dependencies
run: rush install --max-install-attempts 3
- uses: browser-actions/setup-chrome@v1
id: setup-chrome
with:
chrome-version: 120.0.6099
- name: Switch flavor for build
if: ${{ matrix.flavor != 'beta' }}
run: rush switch-flavor:${{ matrix.flavor }}
- name: Build packages/react-composites browser tests
working-directory: ./packages/react-composites
run: rushx build:e2e:chat
- name: Install packlets used by browser tests
run: |
cd packages/react-composites
rush build -t .
- name: Update chat snapshot
id: update-chat-snapshots
run: rushx test:e2e:chat:update
working-directory: ./packages/react-composites
env:
CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}
CHROME_PATH: ${{ steps.setup-chrome.outputs.chrome-path }}
- name: Upload snapshot diff
if: ${{ always() && steps.update-chat-snapshots.outcome == 'failure' }}
uses: actions/upload-artifact@v3
with:
name: snapshots
path: packages/react-composites/test-results
# Check if files have changed
# More information see: https://stackoverflow.com/questions/3878624/how-do-i-programmatically-determine-if-there-are-uncommitted-changes
- name: Check for snapshot changes
id: changescheck
run: |
if [[ -z $(git status packages -s) ]]
then
echo "hasChanged=false" >> $GITHUB_OUTPUT
else
echo "hasChanged=true" >> $GITHUB_OUTPUT
fi
- name: Push new snapshots, if any
if: ${{ steps.changescheck.outputs.hasChanged == 'true' }}
# Before pushing changes to origin, merge any intervening changes on the upstream branch.
# This allows multiple snapshot update jobs in this action to run concurrently.
# - The only files updated locally are UI snapshots
# - Each job is responsible for a unique set of UI snapshots
# Thus we do not expect any merge conflicts due to the concurrent jobs from this workflows.
#
# If the UI snapshots are updated in the upstream branch while this job was running
# (e.g., due to a merge from the base_ref for a PR), this merge will fail, and the
# workflow will have to be triggered again. This is the desired behavior because the workflow
# should not silently overwrite updates to the target branch.
run: |
git add packages/react-composites/*.png
git commit -m 'Update packages/react-composites ChatComposite browser test snapshots'
git pull origin ${{ needs.get_target_branch.outputs.target }} --no-rebase --no-edit
git push
push_updated_snapshots:
needs: [chat_composite]
if: needs.precondition.outputs.met
name: Push all updated snapshots to branch
runs-on: ubuntu-latest
permissions: read-all
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Use a machine account when checking out. This is to workaround the issue where GitHub
# actions, when using the default account, cannot trigger other actions.
# This machine account is only for this PAT, pwd was created and thrown away
# If an update is needed, create a new account, add access to the repo and generate a new PAT
token: ${{ secrets.MACHINE_ACCOUNT_PAT }}