GitHub Actions: reusable workflows is generally available
DRY your Actions configuration with reusable workflows (and more!)
GitHub Actions keeps getting better and better for teams of all shapes and sizes. Over the past month, thousands of repositories have used the beta of reusable workflows to reduce duplication and increase consistency, including many large enterprises. We’ve released a number of improvements since the beta began in October. This includes output support for passing data from reusable workflows to other jobs, environment secret support, and details about reusable workflows usage in the audit log.
Reusable workflows round out an impressive list of recent features that are aimed at making GitHub Actions scale to teams of any size. In this blog post, I’ll explore three scenarios that have gotten easier with GitHub Actions.
Combine setup, login, and run steps into a single action
Do you find yourself copying and pasting setup or login steps? You can now compose those into a single action. Like any action, these can be used in multiple jobs and workflows, and published to GitHub Marketplace.
Before
jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: docker/setup-buildx-action@v1 - uses: docker/login-action@v1 with: username: ${{inputs.registry_username}} password: ${{inputs.registry_password}} - uses: docker/build-push-action@v2 with: context: . push: true tags: user/app:latest
After
jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: my-org/publish-docker@v1 with: registry_username: ${{secrets.REGISTRY_USERNAME}} registry_password: ${{secrets.REGISTRY_PASSWORD}}
Learn more about action composition
Build consistently across multiple, dozens, or even hundreds of repositories
Do you have a bunch of repositories that are essentially built or deployed the same way? You can now create a reusable workflow, and keep all those repositories in sync.
Before
jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [10.x, 12.x, 14.x, 15.x] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - run: npm ci - run: npm run build --if-present - run: npm test
After
jobs: build: uses: my-org/actions/.github/workflows/node.js.yml@1
You may want to build a library of reusable workflows, designed to work independently or together. That works too. Use inputs
and outputs
to pass data between them, just like with actions.
Learn more about reusing workflows
Require specific workflows for production deployments
Do you need to ensure that certain steps are followed for production deployments? You can combine reusable workflows with OpenID Connect, now in beta, to enforce required workflows.
To do this, first define a reusable workflow. For example:
# shopy/app/.github/workflows/release.yml
name: Build and release
on: [push, pull_request]
jobs:
cd:
uses: shopy/actions/.github/workflows/cd.yml@1
# shopy/actions/.github/workflows/cd.yml
name: CD
on: [workflow_call]
jobs:
deploy_to_review:
...
deploy_to_staging:
...
deploy_to_production:
environment: production
…
Then, create a policy in your cloud platform to restrict credentials to just that workflow when it accesses the production environment, as follows:
Subject: repo:shopy/*:environment:production
Custom claim: job_workflow_ref:
shopy/actions/cd/.github/workflows/cd.yml@1
Now, only the deploy_to_production job can access the credentials needed to deploy to production. Also, everyone in your team will need to use the reusable workflow to deploy.
Learn more about using OpenID Connect with reusable workflows
Next up
In the coming months, we’ll ship additional features that help our customers scale to teams of any size. For example, customers who don’t have to deploy to a supported OpenID Connect cloud platform and utilize self-hosted runners will be able to restrict those runners to specific reusable workflows. Enterprise customers will be able to reference actions in internal repositories, removing the need to make them public. And we’ll deliver reusable workflows on GitHub Enterprise Server.
For questions, please visit the GitHub Actions community forum.
Tags:
Written by
Related posts
Students: Start building your skills with the GitHub Foundations certification
The GitHub Foundations Certification exam fee is now waived for all students verified through GitHub Education.
Announcing GitHub Secure Open Source Fund: Help secure the open source ecosystem for everyone
Applications for the new GitHub Secure Open Source Fund are now open! Applications will be reviewed on a rolling basis until they close on January 7 at 11:59 pm PT. Programming and funding will begin in early 2025.
Software is a team sport: Building the future of software development together
Microsoft and GitHub are committed to empowering developers around the world to innovate, collaborate, and create solutions that’ll shape the next generation of technology.