Featured image of post GitHub Actions Advanced: Workflows Beyond CI/CD Basics Featured image of post GitHub Actions Advanced: Workflows Beyond CI/CD Basics

GitHub Actions Advanced: Workflows Beyond CI/CD Basics

Master advanced GitHub Actions including reusable workflows, composite actions, matrix strategies, OIDC authentication, and deployment patterns.

Introduction

GitHub Actions has evolved from a simple CI/CD tool into a comprehensive automation platform. While basic workflows are well-documented, the platform’s advanced features—reusable workflows, composite actions, matrix strategies, and deployment patterns—enable sophisticated automation pipelines. This article explores these advanced capabilities for teams building complex CI/CD systems.

Reusable Workflows

Reusable workflows allow you to define a workflow in one repository and call it from others, following the DRY principle. They are triggered with workflow_call and accept inputs and secrets.

# .github/workflows/ci.yml (reusable)
on:
  workflow_call:
    inputs:
      node-version:
        required: true
        type: string
    secrets:
      NPM_TOKEN:
        required: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ inputs.node-version }}

Calling a reusable workflow from another repository:

jobs:
  call-workflow:
    uses: org/repo/.github/workflows/ci.yml@main
    with:
      node-version: "20"
    secrets:
      NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

Best practices include pinning versions with semver tags or commit SHAs, validating inputs, managing secrets carefully, and maintaining an organizational workflow catalog.


Composite Actions

Composite actions bundle multiple workflow steps into a single action without requiring Docker containers or JavaScript. They are defined using action.yml:

# action.yml
name: "Deploy to Cloud Run"
description: "Deploy a container to Google Cloud Run"
inputs:
  service-name:
    description: "Cloud Run service name"
    required: true
runs:
  using: "composite"
  steps:
    - id: auth
      uses: google-github-actions/auth@v2
    - id: deploy
      uses: google-github-actions/deploy-cloudrun@v2
      with:
        service: ${{ inputs.service-name }}

Composite actions are ideal for standardizing deployment steps across multiple services or teams. They can be published to the GitHub Marketplace for organization-wide reuse.


Matrix Strategies

Matrix strategies enable running jobs across multiple configurations in parallel, which is essential for comprehensive testing:

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node: [18, 20, 22]
        exclude:
          - os: macos-latest
            node: 18
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}

Advanced matrix patterns include dynamic generation from JSON output, include and exclude rules for targeted configurations, maximum parallelism control, and using fail-fast: false to gather results from all configurations even if some fail.


Environment Protection Rules

GitHub Environments provide deployment gates with configurable protection rules:

RuleDescription
Required reviewersDesignated approvers must approve before deployment
Wait timerMandatory delay before deployment
Deployment branchesRestrict deployments to specific branch patterns
deploy-production:
  runs-on: ubuntu-latest
  environment:
    name: production
    url: https://example.com
  steps:
    - run: echo "Deploying to production"

Environments also enable secret scoping—secrets can be restricted to specific environments, preventing accidental use in lower environments.


OIDC Authentication

OpenID Connect allows workflows to authenticate to cloud providers without storing long-lived secrets:

jobs:
  deploy:
    permissions:
      id-token: write
      contents: read
    steps:
      - id: auth
        uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: "projects/.../locations/.../workloadIdentityPools/..."
      - run: gcloud deploy ...

OIDC eliminates static service account keys for AWS, Azure, GCP, and HashiCorp Vault, significantly improving security posture by issuing short-lived tokens per workflow run.


Deployment Patterns

Modern deployment patterns supported by GitHub Actions include progressive delivery with canary deployments that incrementally shift traffic, blue-green deployments that switch between two identical environments, GitOps workflows integrated with Argo CD for Kubernetes, and environment promotion where artifacts are built once and promoted through dev, staging, and production with automated rollback based on health checks.


Conclusion

Advanced GitHub Actions patterns transform CI/CD from simple build-test pipelines into robust, secure deployment platforms. Reusable workflows and composite actions enforce consistency across organizations, while matrix strategies and OIDC authentication handle complexity and security at scale. Mastering these patterns enables teams to build sophisticated automation that grows with their infrastructure needs.