SW-5791 Event Management - Follow up #11765
Workflow file for this run
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
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node | |
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions | |
name: Deployment | |
on: | |
push: | |
branches: | |
- main | |
- qa | |
tags: | |
# Semver (these are glob-like patterns, not regexes; the "." has no special meaning) | |
- v[0-9].[0-9]+.[0-9]+ | |
# Date-based | |
- v2[0-9]+.[0-9]+ | |
pull_request: | |
permissions: | |
id-token: write | |
contents: read | |
concurrency: | |
group: ${{ github.ref }}-${{ github.workflow }} | |
# Cancel in-progress builds on PRs, but not on staging deploys. | |
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} | |
jobs: | |
deploy: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set Environment | |
run: ./.github/scripts/set-environment.sh | |
- name: Get yarn cache directory path | |
id: yarn-cache-dir-path | |
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
- uses: actions/cache@v4 | |
id: yarn-cache | |
with: | |
path: | | |
${{ steps.yarn-cache-dir-path.outputs.dir }} | |
node_modules | |
key: ${{ runner.os }}-yarn-2-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- name: Install dependencies | |
run: yarn | |
# This is currently failing because the server hasn't been started yet. | |
# Additionally, it's not enough to just output the generated types file. | |
# We need to create a script that checks that our types file is up to date. | |
#- name: generate schemas | |
# run: yarn generate-types | |
- name: Check that code is formatted | |
run: yarn prettier --check . | |
- name: Generate strings | |
run: yarn generate-strings | |
# Disable the linter since it will not pass in its current state | |
# - name: Run linter | |
# run: yarn lint | |
- name: Do typescript check | |
run: yarn ts | |
- name: Run unit tests | |
run: yarn test --ci | |
- name: Download and start backend | |
if: github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') | |
run: yarn server:reset | |
env: | |
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KEYCLOAK_ISSUERURI: https://auth.staging.terraware.io/realms/terraware | |
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENTSECRET: dummy | |
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUERURI: https://auth.staging.terraware.io/realms/terraware | |
TERRAWARE_MAPBOX_API_TOKEN: ${{ secrets.REACT_APP_MAPBOX_TOKEN }} | |
- name: Install Playwright Browsers | |
run: yarn playwright install --with-deps | |
- name: Run end-to-end playwright tests | |
# Skip tests on main and releases because of Cypress hanging bug | |
if: github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') | |
run: yarn test:e2e | |
env: | |
REACT_APP_TERRAWARE_API: 'http://localhost:8080' | |
REACT_APP_SNACKBAR_TIMEOUT: 1000 | |
REACT_APP_TERRAWARE_FE_BUILD_VERSION: ${{ env.APP_VERSION }} | |
- name: save screenshots of e2e test failures | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: playwright-report | |
path: playwright-report/ | |
retention-days: 30 | |
- name: build | |
run: yarn build | |
env: | |
REACT_APP_TERRAWARE_API: '' | |
REACT_APP_TERRAWARE_FE_BUILD_VERSION: ${{ env.APP_VERSION }} | |
REACT_APP_MIXPANEL_TOKEN: ${{ secrets[env.MIXPANEL_SECRET] }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Docker login | |
if: env.IS_CD == 'true' | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Docker build/push | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
cache-from: type=gha | |
cache-to: type=gha, mode=max | |
tags: ${{ env.DOCKER_TAGS }} | |
platforms: linux/amd64,linux/arm64 | |
push: ${{ env.IS_CD == 'true' }} | |
- name: Configure AWS Credentials | |
if: env.IS_CD == 'true' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-region: ${{ secrets[env.AWS_REGION_SECRET_NAME] }} | |
role-to-assume: ${{ secrets[env.AWS_ROLE_SECRET_NAME] }} | |
- name: Connect to Tailscale | |
uses: tailscale/github-action@v2 | |
with: | |
oauth-client-id: ${{ secrets.TAILSCALE_OAUTH_CLIENT_ID }} | |
oauth-secret: ${{ secrets.TAILSCALE_OAUTH_CLIENT_SECRET }} | |
tags: tag:github | |
- name: Deploy | |
if: env.IS_CD == 'true' | |
env: | |
SSH_KEY: ${{ secrets[env.SSH_KEY_SECRET_NAME] }} | |
SSH_USER: ${{ secrets[env.SSH_USER_SECRET_NAME] }} | |
run: ./.github/scripts/deploy.sh | |
- name: Jira Login | |
if: env.TIER == 'PROD' | |
uses: atlassian/gajira-login@master | |
env: | |
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} | |
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} | |
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} | |
- name: Create Jira Transition List | |
if: env.TIER == 'PROD' | |
run: curl https://terraware.github.io/terraware-web/unreleased.log | grep -E 'SW-[0-9]+' -o | sort -u > ./docs/jiralist.txt | |
- name: Transition Jiras | |
if: env.TIER == 'PROD' | |
uses: terraware/gajira-transition-multiple@master | |
with: | |
issueList: ./docs/jiralist.txt | |
transition: 'Released to Production from Done' |