feature: add monorepo tooling to minimize maintenance #148
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: Snackpub | |
defaults: | |
run: | |
working-directory: snackpub | |
concurrency: | |
group: snackpub-${{ 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-snackpub/** | |
- .github/workflows/snackpub.yml | |
- snackpub/** | |
- .eslint* | |
- .prettier* | |
- yarn.lock | |
push: | |
branches: [main] | |
paths: | |
- .github/actions/setup-google-cloud/** | |
- .github/actions/setup-secrets/** | |
- .github/actions/setup-snackpub/** | |
- .github/workflows/snackpub.yml | |
- snackpub/** | |
- .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 snackpub | |
uses: ./.github/actions/setup-snackpub | |
- name: π¨ Lint snackpub | |
run: yarn lint --max-warnings 0 | |
- name: π§ͺ Unit test website | |
run: yarn test --ci | |
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.SNACK_GCLOUD_KEY }} | |
- name: π Build snackpub | |
run: skaffold build --filename snackpub/skaffold.yaml | |
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: snackpub-staging | |
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.SNACK_GCLOUD_KEY }} | |
- name: π Build snackpub | |
run: skaffold build --filename snackpub/skaffold.yaml --file-output /tmp/build.json | |
working-directory: ./ | |
env: | |
SKAFFOLD_PUSH_IMAGE: 'true' | |
- name: π§Ή Dry-run prune docker image | |
run: ./bin/prune-gcr snackpub --dry-run | |
working-directory: ./ | |
- name: π Deploy snackpub to k8s | |
run: skaffold deploy --status-check --build-artifacts /tmp/build.json | |
working-directory: snackpub | |
env: | |
ENVIRONMENT: staging | |
- 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 Snackpub 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: snackpub-production | |
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.SNACK_GCLOUD_KEY }} | |
- name: π Build snackpub | |
run: skaffold build --filename snackpub/skaffold.yaml --file-output /tmp/build.json | |
working-directory: ./ | |
env: | |
ENVIRONMENT: production | |
SKAFFOLD_PUSH_IMAGE: 'true' | |
- name: π Deploy snackpub to k8s | |
run: skaffold deploy --status-check --build-artifacts /tmp/build.json | |
working-directory: snackpub | |
env: | |
ENVIRONMENT: production | |
- name: π§Ή Prune docker image | |
if: ${{ success() }} | |
run: ./bin/prune-gcr snackpub | |
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 Snackpub to Production | |
fields: message,commit,author,job,took |