This guide explains how to create and use reusable workflows in GitHub Actions to streamline deployment processes.
By centralizing common jobs—like deployment—into standalone workflows, you can reduce duplication, simplify updates, and enforce best practices across all your repositories. This guide shows you how to extract deployment logic into a reusable workflow and invoke it from language-specific CI pipelines.
Here’s an example .github/workflows/ci-testing.yml that runs tests, coverage, dependency scanning, build, and deployments in sequence:
Copy
Ask AI
name: CI Workflowon: pushjobs: unit-tests: runs-on: ubuntu-latest strategy: matrix: os: [macos-latest, ubuntu-latest, windows-latest] steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Run unit tests run: npm test code-coverage: needs: unit-tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Generate coverage report run: npm run coverage dependency-scan: needs: code-coverage runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Scan for vulnerabilities run: npm audit build: needs: dependency-scan runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build application run: npm run build deploy-dev: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Node.js uses: actions/setup-node@v2 with: node-version: '14' - name: Authenticate to DEV run: echo "Authenticating to DEV" - name: Deploy to development run: echo "Deploying to development environment" - name: Notify team run: echo "Development deployment complete" deploy-prod: needs: deploy-dev runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Node.js uses: actions/setup-node@v2 with: node-version: '14' - name: Authenticate to PROD run: echo "Authenticating to PROD" - name: Deploy to production run: echo "Deploying to production environment" - name: Notify team run: echo "Production deployment complete"
Copy-pasting deployment steps across multiple workflows leads to fragmented updates and higher maintenance costs. A single change requires edits in every file.