Snackpub #251
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.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-snackpub/** | |
- .github/workflows/snackpub.yml | |
- snackpub/** | |
- .eslint* | |
- .prettier* | |
- yarn.lock | |
- turbo.json | |
push: | |
branches: [main] | |
paths: | |
- .github/actions/setup-google-cloud/** | |
- .github/actions/setup-snackpub/** | |
- .github/workflows/snackpub.yml | |
- snackpub/** | |
- .eslint* | |
- .prettier* | |
- yarn.lock | |
- turbo.json | |
jobs: | |
review: | |
runs-on: ubuntu-latest | |
steps: | |
- name: π Setup repository | |
uses: actions/checkout@v3 | |
- name: π Setup snackpub | |
uses: ./.github/actions/setup-snackpub | |
- name: π¨ Lint snackpub | |
run: yarn lint --max-warnings 0 | |
- name: π§ͺ Test snackpub | |
run: yarn test --ci --maxWorkers 1 | |
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 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 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 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 |