Skip to content

Commit

Permalink
Refactor into reusable workflows
Browse files Browse the repository at this point in the history
  • Loading branch information
cesarvarela committed Nov 27, 2023
1 parent 2dad8c2 commit f03b4a8
Show file tree
Hide file tree
Showing 7 changed files with 264 additions and 207 deletions.
98 changes: 98 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Build
on:
workflow_call:
inputs:
environment:
type: string
description: Environment to deploy
required: true

jobs:
install-and-build:
name: NPM install and build site
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest-16-core-64gb
defaults:
run:
shell: bash
working-directory: site/gatsby-site
steps:

- name: Checkout
uses: actions/checkout@v4

# Cache 'node_modules' and '~/.cache/Cypress' folder
- name: Cache node modules
id: cache-nodemodules
uses: actions/[email protected]
env:
cache-name: cache-install-folder
with:
# caching node_modules
path: |
site/gatsby-site/node_modules
~/.cache/Cypress
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Install NPM dependencies
if: steps.cache-nodemodules.outputs.cache-hit != 'true'
uses: cypress-io/github-action@v4
with:
working-directory: site/gatsby-site
# just perform install
runTests: false
install-command: npm ci --legacy-peer-deps

- name: Install Netlify CLI
run: npm install netlify-cli -g

- name: Build using Netlify
run: netlify build --context deploy-preview
working-directory: site/gatsby-site
env:
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
E2E_ADMIN_USERNAME: ${{ secrets.E2E_ADMIN_USERNAME }}
E2E_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD }}
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }}
GATSBY_ALGOLIA_APP_ID: ${{ secrets.GATSBY_ALGOLIA_APP_ID }}
GATSBY_ALGOLIA_SEARCH_KEY: ${{ secrets.GATSBY_ALGOLIA_SEARCH_KEY }}
GATSBY_AVAILABLE_LANGUAGES: ${{ secrets.GATSBY_AVAILABLE_LANGUAGES }}
GATSBY_REALM_APP_ID: ${{ secrets.GATSBY_REALM_APP_ID }}
GOOGLE_TRANSLATE_API_KEY: ${{ secrets.GOOGLE_TRANSLATE_API_KEY }}
MONGODB_CONNECTION_STRING: ${{ secrets.MONGODB_CONNECTION_STRING }}
MONGODB_REPLICA_SET: ${{ secrets.MONGODB_REPLICA_SET }}
MONGODB_TRANSLATIONS_CONNECTION_STRING: ${{ secrets.MONGODB_TRANSLATIONS_CONNECTION_STRING }}
MONGODB_MIGRATIONS_CONNECTION_STRING: ${{ secrets.MONGODB_MIGRATIONS_CONNECTION_STRING }}
GATSBY_REALM_APP_GRAPHQL_URL: ${{ secrets.GATSBY_REALM_APP_GRAPHQL_URL }}
GATSBY_PRISMIC_REPO_NAME: ${{ secrets.GATSBY_PRISMIC_REPO_NAME }}
PRISMIC_ACCESS_TOKEN: ${{ secrets.PRISMIC_ACCESS_TOKEN }}
NODE_OPTIONS: --dns-result-order=ipv4first
GATSBY_ROLLBAR_TOKEN: ${{ secrets.GATSBY_ROLLBAR_TOKEN }}

# Extract commit hash to use as a cache key
- name: Extract commit hash
shell: bash
run: echo "##[set-output name=commit;]$(echo ${GITHUB_SHA})"
id: extract_commit_hash

# Cache 'public' folder
- name: Cache public folder
uses: actions/[email protected]
env:
cache-name: cache-public
with:
path: |
site/gatsby-site/public
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.extract_commit_hash.outputs.commit }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
191 changes: 18 additions & 173 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,77 +1,19 @@
name: Deploy
name: Deploy to Netlify
on:
workflow_call:
inputs:
environment:
type: string
description: Environment to deploy to
required: true

jobs:
install-and-build:
name: NPM install and build site

netlify-deploy:
runs-on: ubuntu-latest
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest-16-core-64gb
defaults:
run:
shell: bash
working-directory: site/gatsby-site
permissions:
pull-requests: write
steps:

- name: Checkout
uses: actions/checkout@v4

# Cache 'node_modules' and '~/.cache/Cypress' folder
- name: Cache node modules
id: cache-nodemodules
uses: actions/[email protected]
env:
cache-name: cache-install-folder
with:
# caching node_modules
path: |
site/gatsby-site/node_modules
~/.cache/Cypress
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
# Install NPM dependencies
- name: Install NPM dependencies
if: steps.cache-nodemodules.outputs.cache-hit != 'true'
uses: cypress-io/github-action@v4
with:
working-directory: site/gatsby-site
# just perform install
runTests: false
install-command: npm ci --legacy-peer-deps

# Build Gatbsy site
- name: Build site
run: npm run build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
E2E_ADMIN_USERNAME: ${{ secrets.E2E_ADMIN_USERNAME }}
E2E_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD }}
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }}
GATSBY_ALGOLIA_APP_ID: ${{ secrets.GATSBY_ALGOLIA_APP_ID }}
GATSBY_ALGOLIA_SEARCH_KEY: ${{ secrets.GATSBY_ALGOLIA_SEARCH_KEY }}
GATSBY_AVAILABLE_LANGUAGES: ${{ secrets.GATSBY_AVAILABLE_LANGUAGES }}
GATSBY_REALM_APP_ID: ${{ secrets.GATSBY_REALM_APP_ID }}
GOOGLE_TRANSLATE_API_KEY: ${{ secrets.GOOGLE_TRANSLATE_API_KEY }}
MONGODB_CONNECTION_STRING: ${{ secrets.MONGODB_CONNECTION_STRING }}
MONGODB_REPLICA_SET: ${{ secrets.MONGODB_REPLICA_SET }}
MONGODB_TRANSLATIONS_CONNECTION_STRING: ${{ secrets.MONGODB_TRANSLATIONS_CONNECTION_STRING }}
MONGODB_MIGRATIONS_CONNECTION_STRING: ${{ secrets.MONGODB_MIGRATIONS_CONNECTION_STRING }}
GATSBY_REALM_APP_GRAPHQL_URL: ${{ secrets.GATSBY_REALM_APP_GRAPHQL_URL }}
GATSBY_PRISMIC_REPO_NAME: ${{ secrets.GATSBY_PRISMIC_REPO_NAME }}
PRISMIC_ACCESS_TOKEN: ${{ secrets.PRISMIC_ACCESS_TOKEN }}
NODE_OPTIONS: --dns-result-order=ipv4first
GATSBY_ROLLBAR_TOKEN: ${{ secrets.GATSBY_ROLLBAR_TOKEN }}

# Extract commit hash to use as a cache key
- name: Extract commit hash
shell: bash
Expand All @@ -91,118 +33,21 @@ jobs:
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
test:
name: Run Cypress tests
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest-16-core-64gb
needs: install-and-build
defaults:
run:
shell: bash
working-directory: site/gatsby-site
strategy:
# when one test fails, DO NOT cancel the other
# containers, because this will kill Cypress processes
# leaving the Dashboard hanging ...
# https://github.com/cypress-io/github-action/issues/48
fail-fast: false
matrix:
# run 10 copies of the current job in parallel
containers: [1, 2, 3, 4]
# stop the job if it runs over 20 minutes
# to prevent a hanging process from using all your CI minutes
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v4

# Cache node_modules folder
- name: Cache node modules
id: cache-nodemodules-2
uses: actions/[email protected]
env:
cache-name: cache-install-folder
- name: Upload to netlify
uses: netlify/actions/cli@master
id: deploy-netlify
with:
# caching node_modules
path: |
site/gatsby-site/node_modules
~/.cache/Cypress
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
# Install NPM dependencies
- name: Install NPM dependencies
if: steps.cache-nodemodules-2.outputs.cache-hit != 'true'
uses: cypress-io/github-action@v4
with:
working-directory: site/gatsby-site
# just perform install
runTests: false
install-command: npm ci --legacy-peer-deps

# Extract commit hash to use as a cache key
- name: Extract commit hash
shell: bash
run: echo "##[set-output name=commit;]$(echo ${GITHUB_SHA})"
id: extract_commit_hash

# Cache 'public' folder
- name: Cache public folder
uses: actions/[email protected]
args: deploy --dir=site/gatsby-site/public
env:
cache-name: cache-public
with:
path: |
site/gatsby-site/public
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.extract_commit_hash.outputs.commit }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
# Extract branch name
- name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}

# Run all Cypress tests
- name: Cypress run
uses: cypress-io/github-action@v6
with:
working-directory: site/gatsby-site
# we have already installed all dependencies above
install: false
config-file: cypress.config.js
record: true
parallel: true
group: "Cypress e2e tests"
tag: ${{ steps.extract_branch.outputs.branch }}
start: node node_modules/.bin/gatsby serve -p 8000 -H 127.0.0.1
wait-on: http://127.0.0.1:8000
# wait for 10 minutes for the server to respond
wait-on-timeout: 60
- name: Netlify Preview URL
uses: unsplash/[email protected]
env:
# Recommended: pass the GitHub token lets this action correctly
# determine the unique run id necessary to re-run the checks
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
E2E_ADMIN_USERNAME: ${{ secrets.E2E_ADMIN_USERNAME }}
E2E_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD }}
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }}
GATSBY_ALGOLIA_APP_ID: ${{ secrets.GATSBY_ALGOLIA_APP_ID }}
GATSBY_ALGOLIA_SEARCH_KEY: ${{ secrets.GATSBY_ALGOLIA_SEARCH_KEY }}
GATSBY_AVAILABLE_LANGUAGES: ${{ secrets.GATSBY_AVAILABLE_LANGUAGES }}
GATSBY_REALM_APP_ID: ${{ secrets.GATSBY_REALM_APP_ID }}
GOOGLE_TRANSLATE_API_KEY: ${{ secrets.GOOGLE_TRANSLATE_API_KEY }}
MONGODB_CONNECTION_STRING: ${{ secrets.MONGODB_CONNECTION_STRING }}
MONGODB_REPLICA_SET: ${{ secrets.MONGODB_REPLICA_SET }}
MONGODB_TRANSLATIONS_CONNECTION_STRING: ${{ secrets.MONGODB_TRANSLATIONS_CONNECTION_STRING }}
MONGODB_MIGRATIONS_CONNECTION_STRING: ${{ secrets.MONGODB_MIGRATIONS_CONNECTION_STRING }}
GATSBY_REALM_APP_GRAPHQL_URL: ${{ secrets.GATSBY_REALM_APP_GRAPHQL_URL }}
# Since this is triggered on a pull request, we set the commit message to the pull request title
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
GATSBY_ROLLBAR_TOKEN: ${{ secrets.GATSBY_ROLLBAR_TOKEN }}
OUTPUT: "This pull request is being automatically deployed to Netlify.\n\n🔍 Inspect: ${{ steps.deploy-netlify.outputs.NETLIFY_LOGS_URL }}\n✅ Preview: ${{ steps.deploy-netlify.outputs.NETLIFY_URL }}"
with:
msg: ${{ env.OUTPUT }}
check_for_duplicate_msg: false
16 changes: 16 additions & 0 deletions .github/workflows/preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,24 @@ on:
branches:
- staging
jobs:
call-build:
uses: ./.github/workflows/build.yml
secrets: inherit
with:
environment: staging

call-test:
uses: ./.github/workflows/test.yml
needs: call-build
secrets: inherit
with:
environment: staging

call-deploy:
uses: ./.github/workflows/deploy.yml
needs: call-build
secrets: inherit
permissions:
pull-requests: write
with:
environment: staging
Loading

0 comments on commit f03b4a8

Please sign in to comment.