@mike/secrets #597
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: Snackager | |
defaults: | |
run: | |
working-directory: snackager | |
concurrency: | |
group: snackager-${{ github.event_name }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
workflow_dispatch: | |
inputs: | |
deploy: | |
description: What environment should be deployed | |
type: choice | |
default: no-deploy | |
options: | |
- no-deploy | |
- staging | |
- production | |
pull_request: | |
paths: | |
- .github/actions/setup-google-cloud/** | |
- .github/actions/setup-snackager/** | |
- .github/workflows/snackager.yml | |
- snackager/** | |
- packages/snack-content/** | |
- packages/snack-require-context/** | |
- packages/snack-sdk/** | |
- .eslint* | |
- .prettier* | |
- yarn.lock | |
- turbo.json | |
push: | |
branches: [main] | |
paths: | |
- .github/actions/setup-google-cloud/** | |
- .github/actions/setup-snackager/** | |
- .github/workflows/snackager.yml | |
- snackager/** | |
- packages/snack-content/** | |
- packages/snack-require-context/** | |
- packages/snack-sdk/** | |
- .eslint* | |
- .prettier* | |
- yarn.lock | |
- turbo.json | |
jobs: | |
review: | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Setup repository | |
uses: actions/checkout@v3 | |
- name: π Setup snackager | |
uses: ./.github/actions/setup-snackager | |
- name: π¨ Lint snackager | |
run: yarn lint --max-warnings 0 | |
- name: π§ͺ Test snackager | |
run: yarn test --ci --maxWorkers 1 --testPathIgnorePatterns=__integration-tests__ | |
env: | |
# Enable Webpack 4 with newer Node versions | |
NODE_OPTIONS: --openssl-legacy-provider | |
e2e: | |
# Takes a long time, best to only run this on PRs | |
if: ${{ github.event_name == 'pull_request' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Setup repository | |
uses: actions/checkout@v3 | |
- name: π Setup snackager | |
uses: ./.github/actions/setup-snackager | |
- name: π§ͺ Test snackager | |
run: yarn test --ci --maxWorkers 1 --testPathPattern=__integration-tests__ | |
env: | |
# Enable Webpack 4 with newer Node versions | |
NODE_OPTIONS: --openssl-legacy-provider | |
build: | |
if: ${{ github.event_name == 'pull_request' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Setup repository | |
uses: actions/checkout@v3 | |
- name: π Setup Google Cloud SDK | |
uses: ./.github/actions/setup-google-cloud | |
with: | |
project-id: exponentjs | |
project-zone: us-central1 | |
project-cluster: general-central | |
service-key: ${{ secrets.SNACK_GCLOUD_KEY }} | |
- name: π Build snackager | |
run: skaffold build --filename snackager/skaffold.yaml --file-output snackager/build.json | |
working-directory: ./ | |
deploy-staging: | |
if: ${{ (github.event.inputs.deploy == 'staging' && github.event_name != 'pull_request') || (github.event_name == 'push' && github.ref == 'refs/heads/main') }} | |
needs: review | |
runs-on: ubuntu-latest | |
environment: | |
name: snackager-staging | |
url: https://staging.snackager.expo.io/status | |
steps: | |
- name: π Setup repository | |
uses: actions/checkout@v3 | |
- name: π Setup Google Cloud SDK | |
uses: ./.github/actions/setup-google-cloud | |
with: | |
project-id: exponentjs | |
project-zone: us-central1 | |
project-cluster: general-central | |
service-key: ${{ secrets.SNACK_GCLOUD_KEY }} | |
- name: π Build snackager | |
run: skaffold build --filename snackager/skaffold.yaml --file-output snackager/build.json | |
working-directory: ./ | |
env: | |
SKAFFOLD_PUSH_IMAGE: 'true' | |
- name: π§Ή Dry-run prune docker image | |
run: ./bin/prune-gcr snackager --dry-run | |
working-directory: ./ | |
- name: π Add change cause | |
run: kustomize edit add annotation kubernetes.io/change-cause:"Github Actions deploying $GITHUB_SHA at $(date)" | |
working-directory: snackager/k8s/staging | |
- name: π Deploy snackager | |
run: skaffold deploy --filename snackager/skaffold.yaml --status-check --build-artifacts snackager/build.json | |
working-directory: ./ | |
env: | |
SKAFFOLD_PUSH_IMAGE: 'true' | |
- name: π¬ Notify Slack | |
uses: 8398a7/action-slack@v3 | |
if: always() | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_SNACK }} | |
with: | |
channel: '#snack' | |
status: ${{ job.status }} | |
author_name: Deploy Snackager to Staging | |
fields: message,commit,author,job,took | |
deploy-production: | |
if: ${{ github.event.inputs.deploy == 'production' && github.ref == 'refs/heads/main' }} | |
needs: review | |
runs-on: ubuntu-latest | |
environment: | |
name: snackager-production | |
url: https://snackager.expo.io/status | |
steps: | |
- name: π Setup repository | |
uses: actions/checkout@v3 | |
- name: π Setup Google Cloud SDK | |
uses: ./.github/actions/setup-google-cloud | |
with: | |
project-id: exponentjs | |
project-zone: us-central1 | |
project-cluster: general-central | |
service-key: ${{ secrets.SNACK_GCLOUD_KEY }} | |
- name: π Build snackager | |
run: skaffold build --filename snackager/skaffold.yaml --file-output snackager/build.json | |
working-directory: ./ | |
env: | |
ENVIRONMENT: production | |
SKAFFOLD_PUSH_IMAGE: 'true' | |
- name: π Add change cause | |
run: kustomize edit add annotation kubernetes.io/change-cause:"Github Actions deploying $GITHUB_SHA at $(date)" | |
working-directory: snackager/k8s/production | |
- name: π Deploy snackager | |
run: skaffold deploy --filename snackager/skaffold.yaml --status-check --build-artifacts snackager/build.json | |
working-directory: ./ | |
env: | |
ENVIRONMENT: production | |
SKAFFOLD_PUSH_IMAGE: 'true' | |
- name: π§Ή Prune docker image | |
if: ${{ success() }} | |
run: ./bin/prune-gcr snackager | |
working-directory: ./ | |
- name: π¬ Notify Slack | |
if: ${{ always() }} | |
uses: 8398a7/action-slack@v3 | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_SNACK }} | |
with: | |
channel: '#snack' | |
status: ${{ job.status }} | |
author_name: Deploy Snackager to Production | |
fields: message,commit,author,job,took |