Kumpulan GitHub Workflow, Mungkin Berguna.
Photo by Roman Synkevych / Unsplash
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