From e6528b8cf38adbd0440f9125fd183fd3d41b2c84 Mon Sep 17 00:00:00 2001
From: Vladimir Hodakov <vladimir@hodakov.me>
Date: Sun, 25 May 2025 17:58:35 +0400
Subject: [PATCH] Update Woodpecker CI config

---
 .woodpecker/build.yaml  | 35 +++++++++++++++++++++++++++++++
 .woodpecker/docker.yaml | 35 -------------------------------
 .woodpecker/tag.yaml    | 46 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 81 insertions(+), 35 deletions(-)
 create mode 100644 .woodpecker/build.yaml
 delete mode 100644 .woodpecker/docker.yaml
 create mode 100644 .woodpecker/tag.yaml

diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml
new file mode 100644
index 0000000..e76b5cf
--- /dev/null
+++ b/.woodpecker/build.yaml
@@ -0,0 +1,35 @@
+matrix:
+  platform:
+    - linux/amd64
+    - linux/arm64
+
+labels:
+  platform: ${platform}
+
+when:
+  branch: main
+  event: [push, pull_request, tag]
+
+steps:
+  test-build:
+    image: docker:27-dind
+    commands:
+      - docker buildx build -t source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-${platform##linux/} .
+    volumes:
+      - /var/run/docker.sock:/var/run/docker.sock
+    when:
+      event: pull_request
+
+  build-to-registry:
+    image: docker:27-dind
+    environment:
+      CI_USER_PASSWORD:
+        from_secret: registry_token
+    commands:
+      - docker login -u ${CI_REPO_OWNER} -p $${CI_USER_PASSWORD} source.hodakov.me
+      - docker buildx build -t source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-${platform##linux/} .
+      - docker push source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-${platform##linux/}
+    volumes:
+      - /var/run/docker.sock:/var/run/docker.sock
+    when:
+      event: [push, tag]
diff --git a/.woodpecker/docker.yaml b/.woodpecker/docker.yaml
deleted file mode 100644
index a1e085d..0000000
--- a/.woodpecker/docker.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-when:
-  branch: main
-  event: [push, pull_request, tag]
-
-variables:
-  - &repo source.hodakov.me/containers/renkit
-
-steps:
-  dryrun:
-    image: woodpeckerci/plugin-docker-buildx:5.1.0
-    privileged: true
-    settings:
-      dockerfile: Dockerfile
-      platforms: linux/arm64/v8,linux/amd64
-      dry_run: true
-      repo: *repo
-      auto_tag: true
-    when:
-      event: pull_request
-
-  publish:
-    image: woodpeckerci/plugin-docker-buildx:5.1.0
-    privileged: true
-    settings:
-      dockerfile: Dockerfile
-      platforms: linux/arm64/v8,linux/amd64
-      repo: *repo
-      registry: source.hodakov.me
-      auto_tag: true
-      username: ${CI_REPO_OWNER}
-      password:
-        from_secret: registry_token
-    when:
-      event: [push, tag]
diff --git a/.woodpecker/tag.yaml b/.woodpecker/tag.yaml
new file mode 100644
index 0000000..ac0a368
--- /dev/null
+++ b/.woodpecker/tag.yaml
@@ -0,0 +1,46 @@
+when:
+  branch: main
+  event: [push, tag]
+
+depends_on:
+  - build
+
+steps:
+  tag latest:
+    image: docker:27-dind
+    environment:
+      CI_USER_PASSWORD:
+        from_secret: registry_token
+    commands:
+      - docker login -u ${CI_REPO_OWNER} -p $${CI_USER_PASSWORD} source.hodakov.me
+      - docker pull source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-amd64
+      - docker pull source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-arm64
+      - docker manifest create source.hodakov.me/containers/renkit:latest source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-amd64 source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-arm64
+      - docker manifest push source.hodakov.me/containers/renkit:latest
+    volumes:
+      - /var/run/docker.sock:/var/run/docker.sock
+    when:
+      event: push
+
+  tag semver:
+    image: docker:27-dind
+    environment:
+      CI_USER_PASSWORD:
+        from_secret: registry_token
+    commands:
+      - set -eu
+      - docker login -u ${CI_REPO_OWNER} -p $${CI_USER_PASSWORD} source.hodakov.me
+      - source ./scripts/semver.sh
+      - echo "Creating manifest for $${DOCKER_EXACT_TAG}, $${DOCKER_MAJOR_TAG} and $${DOCKER_MINOR_TAG}"
+      - docker pull source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-amd64
+      - docker pull source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-arm64
+      - docker manifest create source.hodakov.me/containers/renkit:$${DOCKER_EXACT_TAG} source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-amd64 source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-arm64
+      - docker manifest create source.hodakov.me/containers/renkit:$${DOCKER_MINOR_TAG} source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-amd64 source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-arm64
+      - docker manifest create source.hodakov.me/containers/renkit:$${DOCKER_MAJOR_TAG} source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-amd64 source.hodakov.me/containers/renkit:${CI_COMMIT_SHA:0:10}-arm64
+      - docker manifest push source.hodakov.me/containers/renkit:$${DOCKER_EXACT_TAG}
+      - docker manifest push source.hodakov.me/containers/renkit:$${DOCKER_MINOR_TAG}
+      - docker manifest push source.hodakov.me/containers/renkit:$${DOCKER_MAJOR_TAG}
+    volumes:
+      - /var/run/docker.sock:/var/run/docker.sock
+    when:
+      event: tag