Skip to main content

GitHub Actions

GitHub Actions is our CI/CD tool of choice. We use it for a variety of tasks such as building and publishing this documentation, building and publishing containers and running Terraform

Style guide

Structure

  • workflow files should be placed in .github/workflows/

  • workflow files should be named using kebab case, e.g. build-and-push.yml

  • workflow files should be named relative to what they are doing, e.g. build-and-push.yml

Syntax

  • workflow files should start with YAML’s document start marker, ---

  • name should be relative to what the workflow is doing, e.g. name: Build and push

  • permissions should default to read-all and be overridden if required

  • jobs.<job_id> should be named relative to what the job is doing, e.g. jobs.build-and-push

  • jobs.<job_id>.name should be relative to what the job is doing, e.g. Build and push

  • jobs.<job_id>.steps[*].id should be relative to what the step is doing, e.g. checkout

  • jobs.<job_id>.steps[*].name should be relative to what the step is doing, e.g. Checkout

  • jobs.<job_id>.steps[*].uses should use the SHA of the release of the action, e.g. uses: actions/checkout@@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

An example of the above can be seen below:

---
name: Build and push

on: # yamllint disable-line rule:truthy
  pull_request:
    branches:
      - main

permissions: read-all

jobs:
  build-and-push:
    name: Build and push
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
      packages: write
    steps:
      - name: Checkout
        id: checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Login to GitHub Container Registry
        id: login_ghcr
        uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Build and push
        id: build_and_push
        uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0
        with:
          context: .
          file: Containerfile
          push: true
          tags: ghcr.io/ministryofjustice/data-platform:latest

And live examples can be found in repository

This page was last reviewed on 25 July 2023. It needs to be reviewed again on 25 January 2024 by the page owner #data-platform-notifications .
This page was set to be reviewed before 25 January 2024 by the page owner #data-platform-notifications. This might mean the content is out of date.