Skip to content

feature: add monorepo tooling to minimize maintenance #472

feature: add monorepo tooling to minimize maintenance

feature: add monorepo tooling to minimize maintenance #472

Workflow file for this run

name: Snackager
defaults:
run:
working-directory: snackager
concurrency:
group: snackager-${{ 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-secrets/**
- .github/actions/setup-snackager/**
- .github/workflows/snackager.yml
- snackager/**
- packages/snack-content/**
- packages/snack-sdk/**
- .eslint*
- .prettier*
- yarn.lock
push:
branches: [main]
paths:
- .github/actions/setup-google-cloud/**
- .github/actions/setup-secrets/**
- .github/actions/setup-snackager/**
- .github/workflows/snackager.yml
- snackager/**
- packages/snack-content/**
- packages/snack-sdk/**
- .eslint*
- .prettier*
- yarn.lock
jobs:
review:
runs-on: ubuntu-latest
steps:
- name: πŸ— Setup repository
uses: actions/checkout@v3
- name: πŸ— Setup secrets
uses: ./.github/actions/setup-secrets
with:
git-crypt-key: ${{ secrets.GIT_CRYPT_KEY }}
- name: πŸ— Setup snackager
uses: ./.github/actions/setup-snackager
- name: 🚨 Lint snackager
run: yarn lint --max-warnings 0
- name: πŸ§ͺ Unit test snackager
run: yarn test --ci --maxWorkers 1 --testPathIgnorePatterns=__integration-tests__
- name: πŸ§ͺ E2E test snackager
run: yarn test --ci --maxWorkers 1 --testPathPattern=__integration-tests__
# Takes a long time, best to only run this on PRs
if: ${{ github.event_name == 'pull_request' }}
build:
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: πŸ— Setup repository
uses: actions/checkout@v3
- name: πŸ— Setup secrets
uses: ./.github/actions/setup-secrets
with:
git-crypt-key: ${{ secrets.GIT_CRYPT_KEY }}
- 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.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 secrets
uses: ./.github/actions/setup-secrets
with:
git-crypt-key: ${{ secrets.GIT_CRYPT_KEY }}
- 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.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 secrets
uses: ./.github/actions/setup-secrets
with:
git-crypt-key: ${{ secrets.GIT_CRYPT_KEY }}
- 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.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