GuidesAdvancedGitHub Actions

Using GitHub Actions Deployment Events

GitHub Actions are a great way to wire together Flightcontrol deployments with other services. For example, to set Vercel environment variables or start an end-to-end integration test.

Example of getting service domain URL on deploy success

This action runs on GitHub’s deployment_status event. It uses the if: to filter a few things:

  • Only run on deploy success: github.event.deployment_status.state == 'success'
  • Only run for a specific Flightcontrol project: github.event.deployment.payload.deployment.projectId == 'cluagwibz000ka6p9uzas7p26'
  • Only run for preview environment: github.event.deployment.payload.deployment.isPreviewEnvironment == true

You can adjust those filters as needed. For example, you can also filter by github.event.deployment.payload.deployment.environmentId or github.event.deployment.payload.deployment.environmentGivenId. But note that environmentId for preview environments will be different for each PR.

Additionally, it gets domain url of the FC_SERVICE_GIVEN_ID: "my-web-app" service. It does this by using the jq utility to search github.event.deployment.payload.deployment.serviceDeployments[] for the service with this given id and then selects the serviceDomain field.

name: Deployment
 
on:
  deployment_status:
jobs:
  run-deployment:
    if: github.event_name == 'deployment_status' && github.event.deployment_status.state == 'success' && github.event.deployment.payload.deployment.projectId == 'cluagwibz000ka6p9uzas7p26' && github.event.deployment.payload.deployment.isPreviewEnvironment == true
    env:
      FC_SERVICE_GIVEN_ID: "my-web-app"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set DOMAIN env varaible
        run: |
          RESULT=$(echo '${{ toJson(github.event.deployment.payload.deployment) }}' | jq -r --arg serviceGivenId "$FC_SERVICE_GIVEN_ID" '.serviceDeployments[] | select(.serviceGivenId == $serviceGivenId) | .serviceDomain')
          echo "Domain $RESULT"
          echo "DOMAIN=$RESULT" >> $GITHUB_ENV
      - name: Do some action with $DOMAIN like set Vercel env variable or start e2e test
        run: echo true

Example of fetching deployment information

This action runs on GitHub’s deployment_status event.

It sets the FC_DEPLOYMENT_ID environment variable by reading github.event.deployment.payload.deployment.deploymentId. Then it uses the FC_API_KEY GitHub secret set on the repo to fetch our Get Deployment API endpoint

name: Deployment
 
on:
  deployment_status:
jobs:
  fetch-deployment:
    env:
      FC_DEPLOYMENT_ID: ${{ github.event.deployment.payload.deployment.deploymentId }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
       - name:  deployment
       - name: Fetch deployment
         run: |
           curl -H "Authorization: Bearer ${{ secrets.FC_API_KEY }}" https://api.flightcontrol.dev/v1/deployments/$FC_DEPLOYMENT_ID