Search code examples
continuous-integrationgithub-actionscontinuous-deployment

GitHub Action workflow not being interpreted upon merge


I'm attempting to create a GHA workflow and I am getting an error that I'm unsure how to fix as I've implemented this in similar environments before.

name: Deploy Staging

# Controls when the workflow will run
on:
  # Triggers the workflow on push events only for the main branch
  push:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  # Run the build job first
  build:
    name: Build
    uses: ./.github/workflows/build.yml

  deploy-staging:
    name: Staging Deploy
    runs-on: ubuntu-latest
    environment:
      name: staging
    needs: [build]
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/setup-node@v3
        with:
          node-version: '14'

      - name: Download build artifacts
        uses: actions/download-artifact@v3
        with:
          name: buildResult

      - name: CDK install
        run: npm install -g aws-cdk

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: XXXX
          aws-region: us-east-1

      - name: CDK diff
        run: cdk --app . diff staging

      - name: CDK deploy
        run: cdk --app . deploy staging --require-approval never

      - name: Configure DX AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: XXXX
          aws-region: us-east-1
          role-session-name: "${{ github.actor }}"

      - name: Report deployment
        uses: XXXX/deployment-tracker-action@v1
        if: always()
        with:
          application-name: XXXX
          environment: staging
          platform: test
          deployment-status: ${{ steps.deploy-workload.outcome == 'success' && 'success' || 'fail' }}
          aws-region: us-east-1
          XXXX

I don't understand quite where I'm going wrong here but when I merged my actions branch and I attempted to get it to work, I received the following message:

error parsing called workflow "./.github/workflows/build.yml": workflow is not reusable as it is missing a `on.workflow_call` trigger

Below is my build file for reference.

name: Build

# Controls when the workflow will run
on:
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
    inputs:
      buildEnvironment:
        description: Build Environment
        required: false
        default: production

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # next build runs lint, don't need a step for it
  build:
    name: Build
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-node@v3
        with:
          node-version: '14'

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: XXXX
          aws-region: us-east-1
          role-session-name: "${{ github.actor }}"

      - name: Install Dependencies
        run: npm install

      - name: CDK install
        run: npm install -g aws-cdk

      - name: CDK build
        run: cdk synth

      - name: Upload build artifacts
        uses: actions/upload-artifact@v3
        with:
          name: buildResult
          path: |
            cdk.out
  test:
    name: Test
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v3

      - uses: actions/setup-node@v3
        with:
          node-version: '14'

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: XXXX
          aws-region: us-east-1
          role-session-name: "${{ github.actor }}"

      - name: Install Dependencies
        run: npm install

      - name: Run tests
        run: npm test

Solution

  • If you want to call another workflow (reusable workflow), the workflow you're calling needs to have the trigger workflow_call.

    Therefore, in order to resolve your error, change build.yml to:

    name: Build
    
    on:
      workflow_call:
      pull_request:
        # etc..