Github Actions make it easy to roll out a wide variety of DevOps automation tasks. The following lesson provides five examples of CI/CD and automation using Github Actions.
Example 1: Continuous Integration
Continuous Integration (CI) automates the process of testing and building your code before merging it. In practice, developers should commit or integrate their changes to the main shared repo once-per-day (or more).
Workflow
name: Node Continuous Integration
on:
pull_request:
branches: [ master ]
jobs:
test_pull_request:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- run: npm ci
- run: npm test
- run: npm run build
Example 2: Continuous Deployment
Continuous Deployment (CD) automatically releases new production code to users. It is the step that happens after new code has been integrated.
See the full Firebase Deployment with Github Actions Guide .
Example 3: Publish Package to NPM on Release
Do you maintain an open source package? It can be tedious to re-publish your package after creating a new release. Use the next workflow to automatically publish a package to NPM or Github Package Registry.
Workflow
name: Sveltefire Package
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- run: npm ci
- run: npm test
publish-npm:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: npm build
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
publish-gpr:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
registry-url: https://npm.pkg.github.com/
scope: '@your-github-username'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
Example 4: Send Email or Chat Messages
Yet another powerful use-case is to post data from Github to your favorite chat or email service, like Slack, Discord, or Twilio SendGrid.
Also see the lessons about Building a Slack Bot and SendGrid Transactional Email with Firebase.
Workflow
name: Slack Issues
on:
issues:
types: [opened]
jobs:
post_slack_message:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: rtCamp/action-slack-notify@v2.0.0
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_USERNAME: CyberJeff
SLACK_CHANNEL: gh-issues
Example 5: Scheduled Background Jobs
You can also run scheduled workflows using cron. A workflow can even be used to run arbitrary tasks at a set interval. For example, you might generate a weekly report of your code changes and email it to your product managers.
For a full example, checkout the Automatic Firestore Backup snippet for a breakdown of this use-case.