A personal journal.

Kumpulan GitHub Workflow, Mungkin Berguna.

Diterbitkan: oleh Aji

Diperbarui: • 1 menit bacaan

Salah satu fitur yang saya manfaatkan dengan maksimal dari GitHub adalah CI. Kapan lagi kamu dapat runner gratis? Namun, di pengalaman saya, GitHub akan otomatis membatalkan proses yang berjalan lebih dari 6 jam. Bagaimana saya tahu? Saya membangun salah satu modul Python selama lebih dari 18 jam.

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