use aws package to upload to s3 #2799
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
name: Scoutgame CI | |
on: | |
push: | |
branches: [main] | |
paths: | |
- '.cdk/**' | |
- 'docker-compose.yml' | |
- '.ebextensions/scoutgame/**' | |
- '.ebstalk.apps.env/scoutgame.env' | |
- '.github/actions/**' | |
- '.github/workflows/deploy_scoutgame.yml' | |
- 'package.json' | |
- 'package-lock.json' | |
- 'apps/scoutgame/**' | |
- 'packages/scoutgame/**' | |
- 'packages/github/**' | |
- 'packages/**' | |
- '@connect-shared/**' | |
- 'abis/**' | |
- 'adapters/**' | |
- 'config/**' | |
- 'connectors/**' | |
- 'lib/**' | |
- 'hooks/**' | |
pull_request: | |
types: [labeled, opened, synchronize] | |
branches: ['**'] | |
paths: | |
- '.cdk/**' | |
- 'docker-compose.yml' | |
- '.ebextensions/scoutgame/**' | |
- '.ebstalk.apps.env/scoutgame.env' | |
- '.github/actions/**' | |
- '.github/workflows/deploy_scoutgame.yml' | |
- 'package.json' | |
- 'package-lock.json' | |
- 'apps/scoutgame/**' | |
- 'packages/scoutgame/**' | |
- 'packages/**' | |
- 'packages/github/**' | |
- '@connect-shared/**' | |
- 'abis/**' | |
- 'adapters/**' | |
- 'config/**' | |
- 'connectors/**' | |
- 'lib/**' | |
- 'hooks/**' | |
concurrency: | |
group: ci-scoutgame-${{ github.event_name }}-${{ github.ref }} | |
jobs: | |
build: | |
name: Build Scoutgame | |
runs-on: ubuntu-latest | |
outputs: | |
head_commit_message: ${{ steps.setup_variables.outputs.commit_message }} | |
deploy_staging: ${{ steps.setup_variables.outputs.deploy_staging }} | |
skip_tests: ${{ steps.setup_variables.outputs.skip_tests }} | |
steps: | |
- name: Print Triggering event context payload | |
env: | |
workflow_event_context: ${{ toJSON(github.event) }} | |
run: | | |
echo "$workflow_event_context" | |
echo "Workflow and code ref: ${{github.ref}}" | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup variables | |
id: setup_variables | |
# source https://github.com/orgs/community/discussions/28474 | |
run: | | |
echo "commit_message=$(git show -s --format=%s)" >> "$GITHUB_OUTPUT" | |
echo "deploy_staging=${{(github.event.action == 'labeled' && github.event.label.name == ':rocket: deploy-scoutgame') || (github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, ':rocket: deploy-scoutgame'))}}" >> $GITHUB_OUTPUT | |
echo "skip_tests=${{ contains(env.commit_message, 'skip-tests') }}" >> $GITHUB_OUTPUT | |
- name: Install dependencies | |
uses: ./.github/actions/install | |
with: | |
app_name: scoutgame | |
- name: Build app | |
uses: ./.github/actions/build_app | |
with: | |
app_name: scoutgame | |
test-scoutgame: | |
name: Test | |
runs-on: ubuntu-latest | |
needs: build | |
if: ${{ github.event.action != 'labeled' && needs.build.outputs.skip_tests != 'true' }} | |
# Postgres setup copied from https://gist.github.com/2color/537f8ef13ecec80059abb007839a6878 | |
services: | |
postgres: | |
image: postgres | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: postgres | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
--hostname postgres | |
ports: | |
# Maps tcp port 5432 on service container to the host | |
- 5432:5432 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Restore dependencies from cache | |
uses: ./.github/actions/install | |
with: | |
app_name: scoutgame | |
- name: Setup test database | |
run: npx dotenv -e .env.test.local -- npm run prisma:reset | |
- name: Restore app from cache | |
uses: ./.github/actions/build_app | |
with: | |
app_name: scoutgame | |
- name: Typecheck Scoutgame app | |
run: npm run typecheck -w apps/scoutgame | |
- name: Run eslint on changed files | |
uses: tj-actions/eslint-changed-files@v25 | |
with: | |
skip_annotations: 'true' # do not annotate code in the PR | |
file_extensions: '**/*.{ts,tsx}' | |
warn_ignored: 'true' | |
# Flag necessary to avoid issues when using parentheses in the paths | |
# https://github.com/tj-actions/eslint-changed-files/issues/1801#issuecomment-2083477324 | |
escape_paths: 'false' | |
- name: Run app tests | |
run: npm run scoutgame:test | |
- name: Run package tests | |
run: npx dotenv -e .env.test.local -- npm run test -w packages/scoutgame | |
test-scoutgame-e2e: | |
name: Test e2e | |
runs-on: ubuntu-latest | |
needs: build | |
# if: ${{ github.event.action != 'labeled' && needs.build.outputs.skip_tests != 'true' }} | |
# Postgres setup copied from https://gist.github.com/2color/537f8ef13ecec80059abb007839a6878 | |
services: | |
postgres: | |
image: postgres | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: postgres | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
--hostname postgres | |
ports: | |
# Maps tcp port 5432 on service container to the host | |
- 5432:5432 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Restore dependencies from cache | |
uses: ./.github/actions/install | |
with: | |
app_name: scoutgame | |
- name: Setup test database | |
run: npx dotenv -e .env.test.local -- npm run prisma:reset | |
- name: Restore app from cache | |
uses: ./.github/actions/build_app | |
with: | |
app_name: scoutgame | |
# unbuffer insures that we print to the log in realtime | |
- name: Install unbuffer | |
run: sudo apt-get update && sudo apt-get install -y expect-dev | |
- name: Start scoutgame app | |
run: | | |
unbuffer npm run scoutgame:start:test:ci 2>&1 | tee server.log & | |
sleep_loop_ct=0 | |
until curl localhost:3337/api/health || [[ $sleep_loop_ct > 30 ]]; do | |
echo "webapp not up in loop $sleep_loop_ct ... sleeping" | |
sleep_loop_ct=$((sleep_loop_ct + 1)) | |
sleep 1 | |
done | |
- name: Run Scoutgame E2E tests | |
env: | |
REACT_APP_APP_ENV: 'test' | |
# we have to run docker command ourselves to set network=host so that playwright can access the server | |
run: | | |
docker run --name mcrmicrosoftcomplaywrightv1343jammy_68c205 \ | |
--workdir /github/workspace --rm \ | |
-e "REACT_APP_APP_ENV" -e CI=true \ | |
-v "/var/run/docker.sock":"/var/run/docker.sock" \ | |
-v "/home/runner/work/_temp/_github_home":"/github/home" \ | |
-v "/home/runner/work/_temp/_github_workflow":"/github/workflow" \ | |
-v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" \ | |
-v "/home/runner/work/app.charmverse.io/app.charmverse.io":"/github/workspace" \ | |
--network "host" \ | |
--ipc=host \ | |
mcr.microsoft.com/playwright:v1.47.1-jammy \ | |
npm run scoutgame:e2e:ci -- -- --timeout=20000 --workers=2 || { echo $'\n👉 Here\'s the server output for debugging:\n' && cat server.log & exit 1; } | |
# Upload reporst for Github Actions | |
# Sources: | |
# https://playwright.dev/docs/ci-intro | |
# https://playwright.dev/docs/trace-viewer#opening-the-trace | |
# To view playwright-report: download the zip, unpack and run "npx playwright show-report path/to/folder" | |
# To view test-results: download the zip, run "npx playwright show-trace path/to/trace.zip" | |
- uses: actions/upload-artifact@v4 | |
if: ${{ !cancelled() }} | |
with: | |
name: playwright | |
path: | | |
apps/scoutgame/playwright-report/ | |
apps/scoutgame/test-results/ | |
retention-days: 5 | |
upload-docker: | |
name: Upload Docker image | |
runs-on: ubuntu-latest | |
# run whether previous jobs were successful or skipped | |
if: | | |
github.ref == 'refs/heads/main' || needs.build.outputs.deploy_staging == 'true' | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install dependencies | |
uses: ./.github/actions/install | |
with: | |
app_name: scoutgame | |
- name: Restore app from cache | |
uses: ./.github/actions/build_app | |
with: | |
app_name: scoutgame | |
- name: Update Dockerfile | |
run: | | |
rm Dockerfile && mv apps/scoutgame/Dockerfile Dockerfile | |
- name: Build and Push Docker image | |
id: docker_build_push | |
uses: ./.github/actions/build_docker_image | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
AWS_REGION: us-east-1 | |
with: | |
ecr_registry: scoutgame | |
upload-static-assets: | |
name: Upload static assets | |
runs-on: ubuntu-latest | |
# run whether previous jobs were successful or skipped | |
if: | | |
(github.ref == 'refs/heads/main' && !(failure() || cancelled())) || | |
(needs.build.outputs.deploy_staging == 'true') | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install dependencies | |
uses: ./.github/actions/install | |
with: | |
app_name: scoutgame | |
- name: Calculate Build ID | |
id: get_build_id | |
run: | | |
build_id=${{ hashFiles(format('apps/{0}/*.ts', 'scoutgame'), format('apps/{0}/*.tsx', 'scoutgame')) }} | |
echo "build_id=$build_id" >> $GITHUB_OUTPUT | |
- name: Restore app from cache | |
uses: ./.github/actions/build_app | |
with: | |
app_name: scoutgame | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: us-east-1 | |
- name: Upload static assets to S3 | |
run: | | |
aws s3 sync apps/scoutgame/.next/static/ s3://charm.cdn/webapp-assets/_next/static/ | |
- name: Upload JS source maps to Datadog | |
env: | |
DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} | |
run: | | |
npm install -g @datadog/datadog-ci | |
datadog-ci sourcemaps upload apps/scoutgame/.next/static \ | |
--service=scoutgame \ | |
--release-version=${{ steps.get_build_id.outputs.build_id }} \ | |
--project-path=apps/scoutgame/ \ | |
--minified-path-prefix=https://cdn.charmverse.io/_next/static | |
deploy-production: | |
name: Deploy to production | |
# run whether previous jobs were successful or skipped | |
if: github.ref == 'refs/heads/main' && !(failure() || cancelled()) | |
needs: [test-scoutgame, test-scoutgame-e2e, upload-docker, upload-static-assets] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/deploy_production | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
with: | |
app_name: scoutgame | |
stack: prd-scoutgame | |
deploy-staging: | |
name: Deploy to staging | |
if: needs.build.outputs.deploy_staging == 'true' | |
runs-on: ubuntu-latest | |
# prevent staging deploys + cleanup running in parallel | |
concurrency: staging-${{ github.ref }} | |
needs: [build, upload-docker] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/deploy_staging | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
app_name: scoutgame | |
discord-alert: | |
name: Notify Discord of failure | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/main' && failure() | |
# pass in all steps so we can check if any failed | |
needs: [test-scoutgame, test-scoutgame-e2e, upload-docker, upload-static-assets, upload-docker, deploy-production] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Notify Discord | |
uses: ./.github/actions/notify_error | |
env: | |
DISCORD_WARNINGS_WEBHOOK: ${{ secrets.DISCORD_WARNINGS_WEBHOOK }} | |
with: | |
app_name: scoutgame |