From 6b2f4de5cb047c14cb1bb24843826a601b8f42d5 Mon Sep 17 00:00:00 2001 From: Markus Pesch Date: Tue, 6 May 2025 18:45:29 +0200 Subject: [PATCH] feat(ci): replace drone with gitea actions --- .drone.yml | 670 ------------------------- .gitea/workflows/build.yaml | 48 ++ .gitea/workflows/markdown-linters.yaml | 46 ++ .gitea/workflows/release.yaml | 79 +++ README.md | 1 - manifest.tmpl | 20 - 6 files changed, 173 insertions(+), 691 deletions(-) delete mode 100644 .drone.yml create mode 100644 .gitea/workflows/build.yaml create mode 100644 .gitea/workflows/markdown-linters.yaml create mode 100644 .gitea/workflows/release.yaml delete mode 100644 manifest.tmpl diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 5f93dd7..0000000 --- a/.drone.yml +++ /dev/null @@ -1,670 +0,0 @@ ---- -kind: pipeline -type: kubernetes -name: linter - -clone: - disable: true - -platform: - os: linux - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: markdown lint - commands: - - markdownlint *.md - image: git.cryptic.systems/volker.raschek/markdownlint:0.44.0 - resources: - limits: - cpu: 150 - memory: 150M - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - resources: - limits: - cpu: 150 - memory: 150M - when: - status: - - changed - - failure - -trigger: - event: - exclude: - - tag - ---- -kind: pipeline -type: docker -name: dry-run-amd64 - -clone: - disable: true - -depends_on: -- linter - -platform: - os: linux - arch: amd64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build - image: docker.io/plugins/docker:20.18.8 - settings: - auto_tag: false - dockerfile: Dockerfile - dry_run: true - force_tag: true - no_cache: true - purge: true - mirror: - from_secret: docker_io_mirror - registry: git.cryptic.systems - repo: git.cryptic.systems/volker.raschek/docker-compose - tags: latest-amd64 - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - when: - status: - - changed - - failure - -trigger: - branch: - exclude: - - master - event: - - pull_request - - push - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: docker -name: dry-run-arm64-v8 - -clone: - disable: true - -depends_on: -- linter - -platform: - os: linux - arch: arm64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build - image: docker.io/plugins/docker:20.18.8 - settings: - auto_tag: false - dockerfile: Dockerfile - dry_run: true - force_tag: true - no_cache: true - purge: true - mirror: - from_secret: docker_io_mirror - registry: git.cryptic.systems - repo: git.cryptic.systems/volker.raschek/docker-compose - tags: latest-arm64-v8 - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - when: - status: - - changed - - failure - -trigger: - branch: - exclude: - - master - event: - - pull_request - - push - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: docker -name: latest-amd64 - -clone: - disable: true - -depends_on: -- linter - -platform: - os: linux - arch: amd64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build - image: docker.io/plugins/docker:20.18.8 - settings: - auto_tag: false - dockerfile: Dockerfile - force_tag: true - no_cache: true - purge: true - mirror: - from_secret: docker_io_mirror - registry: git.cryptic.systems - repo: git.cryptic.systems/volker.raschek/docker-compose - tags: latest-amd64 - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - when: - status: - - changed - - failure - -trigger: - branch: - - master - event: - - cron - - push - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: docker -name: latest-arm64-v8 - -clone: - disable: true - -depends_on: -- linter - -platform: - os: linux - arch: arm64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build - image: docker.io/plugins/docker:20.18.8 - settings: - auto_tag: false - dockerfile: Dockerfile - force_tag: true - no_cache: true - purge: true - mirror: - from_secret: docker_io_mirror - registry: git.cryptic.systems - repo: git.cryptic.systems/volker.raschek/docker-compose - tags: latest-arm64-v8 - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - when: - status: - - changed - - failure - -trigger: - branch: - - master - event: - - cron - - push - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: kubernetes -name: latest-manifest - -clone: - disable: true - -depends_on: -- latest-amd64 -- latest-arm64-v8 - -# docker.io/plugins/manifest only for amd64 architectures available -node_selector: - kubernetes.io/os: linux - kubernetes.io/arch: amd64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build-manifest - image: docker.io/plugins/manifest:1.4.0 - settings: - auto_tag: false - ignore_missing: true - spec: manifest.tmpl - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - resources: - limits: - cpu: 150 - memory: 150M - when: - status: - - changed - - failure - -trigger: - branch: - - master - event: - - cron - - push - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: kubernetes -name: latest-sync - -clone: - disable: true - -depends_on: -- latest-manifest - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: latest-sync - commands: - - skopeo sync --all --src=docker --src-creds=$SRC_CRED_USERNAME:$SRC_CRED_PASSWORD --dest=docker --dest-creds=$DEST_CRED_USERNAME:$DEST_CRED_PASSWORD git.cryptic.systems/volker.raschek/docker-compose docker.io/volkerraschek - environment: - SRC_CRED_USERNAME: - from_secret: git_cryptic_systems_container_registry_user - SRC_CRED_PASSWORD: - from_secret: git_cryptic_systems_container_registry_password - DEST_CRED_USERNAME: - from_secret: container_image_registry_user - DEST_CRED_PASSWORD: - from_secret: container_image_registry_password - image: quay.io/skopeo/stable:v1.18.0 - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - resources: - limits: - cpu: 150 - memory: 150M - when: - status: - - changed - - failure - -trigger: - branch: - - master - event: - - cron - - push - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: docker -name: tagged-amd64 - -clone: - disable: true - -platform: - os: linux - arch: amd64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build - image: docker.io/plugins/docker:20.18.8 - settings: - auto_tag: true - auto_tag_suffix: amd64 - dockerfile: Dockerfile - force_tag: true - no_cache: true - purge: true - mirror: - from_secret: docker_io_mirror - registry: git.cryptic.systems - repo: git.cryptic.systems/volker.raschek/docker-compose - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - build_args: - - DC_VERSION=${DRONE_TAG} - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - when: - status: - - changed - - failure - -trigger: - event: - - tag - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: docker -name: tagged-arm64-v8 - -clone: - disable: true - -platform: - os: linux - arch: arm64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build - image: docker.io/plugins/docker:20.18.8 - settings: - auto_tag: true - auto_tag_suffix: arm64-v8 - dockerfile: Dockerfile - force_tag: true - no_cache: true - purge: true - mirror: - from_secret: docker_io_mirror - registry: git.cryptic.systems - repo: git.cryptic.systems/volker.raschek/docker-compose - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - build_args: - - DC_VERSION=${DRONE_TAG} - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - when: - status: - - changed - - failure - -trigger: - event: - - tag - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: kubernetes -name: tagged-manifest - -clone: - disable: true - -depends_on: -- tagged-amd64 -- tagged-arm64-v8 - -# docker.io/plugins/manifest only for amd64 architectures available -node_selector: - kubernetes.io/os: linux - kubernetes.io/arch: amd64 - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: build-manifest - image: docker.io/plugins/manifest:1.4.0 - settings: - auto_tag: true - ignore_missing: true - spec: manifest.tmpl - username: - from_secret: git_cryptic_systems_container_registry_user - password: - from_secret: git_cryptic_systems_container_registry_password - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - resources: - limits: - cpu: 150 - memory: 150M - when: - status: - - changed - - failure - -trigger: - event: - - tag - repo: - - volker.raschek/docker-compose-docker - ---- -kind: pipeline -type: kubernetes -name: tagged-sync - -clone: - disable: true - -depends_on: -- tagged-manifest - -steps: -- name: clone - image: git.cryptic.systems/volker.raschek/git:1.4.0 - -- name: tagged-sync - commands: - - skopeo sync --all --src=docker --src-creds=$SRC_CRED_USERNAME:$SRC_CRED_PASSWORD --dest=docker --dest-creds=$DEST_CRED_USERNAME:$DEST_CRED_PASSWORD git.cryptic.systems/volker.raschek/docker-compose docker.io/volkerraschek - environment: - SRC_CRED_USERNAME: - from_secret: git_cryptic_systems_container_registry_user - SRC_CRED_PASSWORD: - from_secret: git_cryptic_systems_container_registry_password - DEST_CRED_USERNAME: - from_secret: container_image_registry_user - DEST_CRED_PASSWORD: - from_secret: container_image_registry_password - image: quay.io/skopeo/stable:v1.18.0 - -- name: email-notification - environment: - SMTP_FROM_ADDRESS: - from_secret: smtp_from_address - SMTP_FROM_NAME: - from_secret: smtp_from_name - SMTP_HOST: - from_secret: smtp_host - SMTP_USERNAME: - from_secret: smtp_username - SMTP_PASSWORD: - from_secret: smtp_password - image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 - resources: - limits: - cpu: 150 - memory: 150M - when: - status: - - changed - - failure - -trigger: - event: - - tag - repo: - - volker.raschek/docker-compose-docker diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..8c4f602 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,48 @@ +name: Build + +on: + pull_request: + types: + - "opened" + - "reopened" + - "synchronize" + push: + branches: + - master + +jobs: + build-arm64: + runs-on: ubuntu-latest-arm64 + steps: + - uses: actions/checkout@v4.2.2 + - uses: docker/setup-qemu-action@v3.6.0 + - uses: docker/setup-buildx-action@v3.10.0 + + - name: Build and push image + run: | + TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm') + + docker buildx build \ + --platform linux/arm64 \ + --file Dockerfile \ + --provenance false \ + --tag git.cryptic.systems/volker.raschek/docker-compose:${TAG}-arm64 \ + . + + build-amd64: + runs-on: ubuntu-latest-amd64 + steps: + - uses: actions/checkout@v4.2.2 + - uses: docker/setup-qemu-action@v3.6.0 + - uses: docker/setup-buildx-action@v3.10.0 + + - name: Build and push image + run: | + TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm') + + docker buildx build \ + --platform linux/amd64 \ + --file Dockerfile \ + --provenance false \ + --tag git.cryptic.systems/volker.raschek/docker-compose:${TAG}-amd64 \ + . diff --git a/.gitea/workflows/markdown-linters.yaml b/.gitea/workflows/markdown-linters.yaml new file mode 100644 index 0000000..8127fce --- /dev/null +++ b/.gitea/workflows/markdown-linters.yaml @@ -0,0 +1,46 @@ +name: Markdown linter + +on: + pull_request: + paths: [ "**/*.md" ] + types: [ "opened", "reopened", "synchronize" ] + push: + branches: + - '**' + paths: [ "**/*.md" ] + tags-ignore: + - '**' + workflow_dispatch: {} + +jobs: + markdown-link-checker: + container: + image: docker.io/library/node:23.11.0-alpine + runs-on: + - ubuntu-latest + steps: + - name: Install tooling + run: | + apk update + apk add git npm + - uses: actions/checkout@v4.2.2 + - name: Verify links in markdown files + run: | + npm install + npm run readme:link + + markdown-lint: + container: + image: docker.io/library/node:23.11.0-alpine + runs-on: + - ubuntu-latest + steps: + - name: Install tooling + run: | + apk update + apk add git + - uses: actions/checkout@v4.2.2 + - name: Lint markdown files + run: | + npm install + npm run readme:lint diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml new file mode 100644 index 0000000..cb2cf1e --- /dev/null +++ b/.gitea/workflows/release.yaml @@ -0,0 +1,79 @@ +name: Release + +on: + push: + tags: + - "**" + +jobs: + push-arm64: + runs-on: ubuntu-latest-arm64 + steps: + - uses: actions/checkout@v4.2.2 + - uses: docker/setup-qemu-action@v3.6.0 + - uses: docker/setup-buildx-action@v3.10.0 + + - uses: docker/login-action@v3.4.0 + with: + registry: git.cryptic.systems + username: ${{ github.repository_owner }} + password: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }} + + - name: Build and push image + run: | + TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm') + + docker buildx build \ + --platform linux/arm64 \ + --file Dockerfile \ + --provenance false \ + --tag git.cryptic.systems/volker.raschek/docker-compose:${TAG}-arm64 \ + --push \ + . + + push-amd64: + runs-on: ubuntu-latest-amd64 + steps: + - uses: actions/checkout@v4.2.2 + - uses: docker/setup-qemu-action@v3.6.0 + - uses: docker/setup-buildx-action@v3.10.0 + + - uses: docker/login-action@v3.4.0 + with: + registry: git.cryptic.systems + username: ${{ github.repository_owner }} + password: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }} + + - name: Build and push image + run: | + TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm') + + docker buildx build \ + --platform linux/amd64 \ + --file Dockerfile \ + --provenance false \ + --tag git.cryptic.systems/volker.raschek/docker-compose:${TAG}-amd64 \ + --push \ + . + + push-manifest: + runs-on: ubuntu-latest + needs: + - push-arm64 + - push-amd64 + steps: + - uses: docker/login-action@v3.4.0 + with: + registry: git.cryptic.systems + username: ${{ github.repository_owner }} + password: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }} + + - name: Create and push manifest + run: | + TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm') + + docker manifest create git.cryptic.systems/volker.raschek/docker-compose:${TAG} \ + --amend git.cryptic.systems/volker.raschek/docker-compose:${TAG}-amd64 \ + --amend git.cryptic.systems/volker.raschek/docker-compose:${TAG}-arm64 + + docker manifest push git.cryptic.systems/volker.raschek/docker-compose:${TAG} \ No newline at end of file diff --git a/README.md b/README.md index abf6c8e..23676e6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # docker-compose-docker -[![Build Status](https://drone.cryptic.systems/api/badges/volker.raschek/docker-compose-docker/status.svg)](https://drone.cryptic.systems/volker.raschek/docker-compose-docker) [![Docker Pulls](https://img.shields.io/docker/pulls/volkerraschek/docker-compose)](https://hub.docker.com/r/volkerraschek/docker-compose) This project contains all sources to build the container image `docker.io/volkerraschek/docker-compose`. The primary diff --git a/manifest.tmpl b/manifest.tmpl deleted file mode 100644 index 28f9795..0000000 --- a/manifest.tmpl +++ /dev/null @@ -1,20 +0,0 @@ -image: git.cryptic.systems/volker.raschek/docker-compose:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} -{{#if build.tags}} -tags: -{{#each build.tags}} - - {{this}} -{{/each}} - - "latest" -{{/if}} -manifests: - - - image: git.cryptic.systems/volker.raschek/docker-compose:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-amd64 - platform: - architecture: amd64 - os: linux - - - image: git.cryptic.systems/volker.raschek/docker-compose:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-arm64-v8 - platform: - architecture: arm64 - os: linux - variant: v8