Skip to content
Latchkey

Publish Docker Container workflow (owenashurst/agar.io-clone)

The Publish Docker Container workflow from owenashurst/agar.io-clone, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get run de-duplication, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: owenashurst/agar.io-clone.github/workflows/docker-publish.ymlLicense MITView source

What it does

This is the Publish Docker Container workflow from the owenashurst/agar.io-clone repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
name: Publish Docker Container


on:
  push:
    branches:
      - master

  pull_request:
    branches:
      - master

  workflow_dispatch:

env:
  REGISTRY: ghcr.io

  IMAGE_NAME: ${{ github.repository }}


jobs:
  build:
    runs-on: ubuntu-latest

    permissions:
      contents: read

      packages: write

    steps:
      - name: Checkout repository

        uses: actions/checkout@v2


      - name: Log into registry ${{ env.REGISTRY }}

        if: github.event_name != 'pull_request'

        uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c

        with:
          registry: ${{ env.REGISTRY }}

          username: ${{ github.actor }}

          password: ${{ secrets.GITHUB_TOKEN }}


      - name: Extract Docker metadata

        id: meta

        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38

        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}


      - name: Build and push Docker image

        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc

        with:
          context: .

          push: ${{ github.event_name != 'pull_request' }}

          tags: ${{ steps.meta.outputs.tags }}

          labels: ${{ steps.meta.outputs.labels }}

The same workflow, on Latchkey

Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.

name: Publish Docker Container



on:

  push:

    branches:

      - master

  pull_request:

    branches:

      - master

  workflow_dispatch:



env:

  REGISTRY: ghcr.io

  IMAGE_NAME: ${{ github.repository }}



concurrency:

  group: ${{ github.workflow }}-${{ github.ref }}

  cancel-in-progress: true



jobs:

  build:

    timeout-minutes: 30

    runs-on: latchkey-small

    permissions:

      contents: read

      packages: write

    steps:

      - name: Checkout repository

        uses: actions/checkout@v2



      - name: Log into registry ${{ env.REGISTRY }}

        if: github.event_name != 'pull_request'

        uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c

        with:

          registry: ${{ env.REGISTRY }}

          username: ${{ github.actor }}

          password: ${{ secrets.GITHUB_TOKEN }}



      - name: Extract Docker metadata

        id: meta

        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38

        with:

          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}



      - name: Build and push Docker image

        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc

        with:

          context: .

          push: ${{ github.event_name != 'pull_request' }}

          tags: ${{ steps.meta.outputs.tags }}

          labels: ${{ steps.meta.outputs.labels }}

 

What changed

What Latchkey heals here

This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:

This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow