A personal journal.

Kumpulan GitHub Workflow, Mungkin Berguna.

Published on: 24/09/2024 • Updated on: 14/05/2025 • 1 min read

Langsung saja, ini adalah beberapa catatan saya. Mungkin akan diupdate, mungkin tidak.

Build & Publish Dockerfile

name: Build and Push Docker Image

on:
  push:

env:
  # Use docker.io for Docker Hub if empty
  REGISTRY: ghcr.io
  # github.repository as <account>/<repo>
  IMAGE_NAME: ${{ github.repository }}

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Check out code
        uses: actions/checkout@v4

      -
        # Add support for more platforms with QEMU (optional)
        # https://github.com/docker/setup-qemu-action
        name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      -
        name: Login to DockerHub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      -
        # https://github.com/docker/login-action
        name: Log into registry ${{ env.REGISTRY }}
        uses: docker/login-action@v2
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      -
        name: Build and push Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile
          push: true
          platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
          tags: |
            ${{ secrets.DOCKERHUB_USERNAME }}/project-name:${{ github.ref_name }}
            ${{ secrets.DOCKERHUB_USERNAME }}/project-name:latest

Otomatis Sync Upstream

name: Upstream Sync

permissions:
  contents: write

on:
  schedule:
    - cron: "0 0 * * *" # every day
  workflow_dispatch:

jobs:
  sync_latest_from_upstream:
    name: Sync latest commits from upstream repo
    runs-on: ubuntu-latest
    if: ${{ github.event.repository.fork }}

    steps:
      # Step 1: run a standard checkout action
      - name: Checkout target repo
        uses: actions/checkout@v4

      # Step 2: run the sync action
      - name: Sync upstream changes
        id: sync
        uses: aormsby/[email protected]
        with:
          upstream_sync_repo: upstream (xxx/project)
          upstream_sync_branch: main
          target_sync_branch: main
          target_repo_token: ${{ secrets.GITHUB_TOKEN }} # automatically generated, no need to set

          # Set test_mode true to run tests instead of the true action!!
          test_mode: false

      - name: Sync check
        if: failure()
        run: |
          echo "[Error]Due to changes in the workflow file of the upstream repository, GitHub has automatically paused this automatic update. You need to manually Sync Fork once."
          exit 1