Merge pull request #51766 from Expensify/andrew-hybrid-fixes2 #294
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Reminder: If this workflow's name changes, update the name in the dependent workflow at .github/workflows/failureNotifier.yml. | |
name: Process new code merged to main | |
on: | |
push: | |
branches: [main] | |
paths-ignore: [docs/**, help/**, contributingGuides/**, jest/**, tests/**] | |
jobs: | |
typecheck: | |
uses: ./.github/workflows/typecheck.yml | |
lint: | |
uses: ./.github/workflows/lint.yml | |
prettier: | |
uses: ./.github/workflows/prettier.yml | |
test: | |
uses: ./.github/workflows/test.yml | |
confirmPassingBuild: | |
runs-on: ubuntu-latest | |
needs: [typecheck, lint, test] | |
if: ${{ always() }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Announce failed workflow in Slack | |
if: ${{ needs.typecheck.result == 'failure' || needs.lint.result == 'failure' || needs.test.result == 'failure' }} | |
uses: ./.github/actions/composite/announceFailedWorkflowInSlack | |
with: | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} | |
- name: Exit failed workflow | |
if: ${{ needs.typecheck.result == 'failure' || needs.lint.result == 'failure' || needs.test.result == 'failure' }} | |
run: | | |
echo "Checks failed, exiting ~ typecheck: ${{ needs.typecheck.result }}, lint: ${{ needs.lint.result }}, test: ${{ needs.test.result }}" | |
exit 1 | |
chooseDeployActions: | |
runs-on: ubuntu-latest | |
needs: confirmPassingBuild | |
outputs: | |
MERGED_PR: ${{ steps.getMergedPullRequest.outputs.number }} | |
SHOULD_DEPLOY: ${{ fromJSON(steps.shouldDeploy.outputs.SHOULD_DEPLOY) }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get merged pull request | |
id: getMergedPullRequest | |
uses: actions-ecosystem/action-get-merged-pull-request@59afe90821bb0b555082ce8ff1e36b03f91553d9 | |
with: | |
github_token: ${{ github.token }} | |
- name: Check if StagingDeployCash is locked | |
id: isStagingDeployLocked | |
uses: ./.github/actions/javascript/isStagingDeployLocked | |
with: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Check if merged pull request should trigger a deploy | |
id: shouldDeploy | |
run: echo "SHOULD_DEPLOY=${{ (!fromJSON(steps.isStagingDeployLocked.outputs.IS_LOCKED) && github.actor != 'OSBotify') }}" >> "$GITHUB_OUTPUT" | |
skipDeploy: | |
runs-on: ubuntu-latest | |
needs: chooseDeployActions | |
if: ${{ !fromJSON(needs.chooseDeployActions.outputs.SHOULD_DEPLOY) && github.actor != 'OSBotify' }} | |
steps: | |
- name: Comment on deferred PR | |
uses: actions-ecosystem/action-create-comment@cd098164398331c50e7dfdd0dfa1b564a1873fac | |
with: | |
github_token: ${{ secrets.OS_BOTIFY_TOKEN }} | |
number: ${{ needs.chooseDeployActions.outputs.MERGED_PR }} | |
body: | | |
:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. | |
createNewVersion: | |
needs: chooseDeployActions | |
if: ${{ fromJSON(needs.chooseDeployActions.outputs.SHOULD_DEPLOY) }} | |
uses: ./.github/workflows/createNewVersion.yml | |
secrets: inherit | |
updateStaging: | |
needs: [chooseDeployActions, createNewVersion] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Run turnstyle | |
uses: softprops/turnstyle@49108bdfa571e62371bd2c3094893c547ab3fc03 | |
with: | |
poll-interval-seconds: 10 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Checkout main | |
uses: actions/checkout@v4 | |
with: | |
ref: main | |
token: ${{ secrets.OS_BOTIFY_TOKEN }} | |
- name: Setup Git for OSBotify | |
uses: ./.github/actions/composite/setupGitForOSBotifyApp | |
with: | |
GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} | |
OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }} | |
OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }} | |
- name: Update staging branch from main | |
run: | | |
# Re-create the staging branch from main | |
git switch -c staging | |
# Force-update the remote staging branch | |
git push --force origin staging | |
- name: Announce failed workflow in Slack | |
if: ${{ failure() }} | |
uses: ./.github/actions/composite/announceFailedWorkflowInSlack | |
with: | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} | |
e2ePerformanceTests: | |
needs: [chooseDeployActions] | |
if: ${{ needs.chooseDeployActions.outputs.SHOULD_DEPLOY }} | |
uses: ./.github/workflows/e2ePerformanceTests.yml | |
secrets: inherit | |
with: | |
PR_NUMBER: ${{ needs.chooseDeployActions.outputs.MERGED_PR }} |