From 5d4fce5dd6bb9042a4403a99edb0d7a3514335be Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Sun, 10 Jan 2021 15:19:12 +0100 Subject: [PATCH] test multiarch --- .drone.jsonnet | 216 ++++++++++++++++++++++++++++++++++++++++++ .drone.yml | 247 ++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 431 insertions(+), 32 deletions(-) create mode 100644 .drone.jsonnet diff --git a/.drone.jsonnet b/.drone.jsonnet new file mode 100644 index 0000000..224300a --- /dev/null +++ b/.drone.jsonnet @@ -0,0 +1,216 @@ +local PipelineTest = { + kind: 'pipeline', + name: 'test', + platform: { + os: 'linux', + arch: 'amd64', + }, + steps: [ + { + name: 'markdownlint', + image: 'thegeeklab/markdownlint-cli', + commands: [ + "markdownlint 'README.md'", + ], + }, + ], + trigger: { + ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'], + }, +}; + +local PipelineBuildContainer(arch='amd64') = { + kind: 'pipeline', + name: 'build-container-' + arch, + platform: { + os: 'linux', + arch: 'amd64', + }, + steps: [ + { + name: 'wait-for', + image: 'thegeeklab/wait-for', + commands: [ + 'wait-for dind-' + arch + ':2376', + ], + environment: { + WAITFOR_TIMEOUT: 60, + }, + }, + { + name: 'dryrun', + image: 'jdrouet/docker-with-buildx:stable', + commands: [ + 'docker buildx create --use', + 'docker buildx build --platform linux/' + std.strReplace(arch, '_', '/') + ' --tag thegeeklab/buildx-alpine:latest .', + ], + volumes: [{ + name: 'dockersock-' + arch, + path: '/var/run', + }], + depends_on: ['wait-for'], + when: { + ref: ['refs/pull/**'], + }, + }, + { + name: 'tags', + image: 'thegeeklab/docker-autotag', + environment: { + DOCKER_AUTOTAG_FORCE_LATEST: 'True', + DOCKER_AUTOTAG_IGNORE_PRERELEASE: 'True', + DOCKER_AUTOTAG_OUTPUT_FILE: '.tags', + DOCKER_AUTOTAG_VERSION: '${DRONE_TAG}', + }, + depends_on: ['wait-for'], + when: { + ref: ['refs/heads/main', 'refs/tags/**'], + }, + }, + { + name: 'publish-dockerhub', + image: 'jdrouet/docker-with-buildx:stable', + commands: [ + 'docker login -u "$$DOCKER_USERNAME" -p "$$DOCKER_PASSWORD"', + 'docker buildx create --use', + 'docker buildx build --platform linux/' + std.strReplace(arch, '_', '/') + ' --tag thegeeklab/buildx-alpine:latest-' + std.split(arch, '_')[0] + ' .', + ], + environment: { + DOCKER_PASSWORD: { from_secret: 'docker_password' }, + DOCKER_USERNAME: { from_secret: 'docker_username' }, + }, + volumes: [{ + name: 'dockersock-' + arch, + path: '/var/run', + }], + when: { + ref: ['refs/heads/main', 'refs/tags/**'], + }, + depends_on: ['tags'], + }, + ], + services: [ + { + name: 'dind-' + arch, + image: 'docker:dind', + privileged: true, + volumes: [{ + name: 'dockersock-' + arch, + path: '/var/run', + }], + }, + ], + volumes: [{ + name: 'dockersock-' + arch, + temp: {}, + }], + depends_on: [ + 'test', + ], + trigger: { + ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'], + }, +}; + +local PipelineNotifications = { + kind: 'pipeline', + image_pull_secrets: ['docker_config'], + name: 'notifications', + platform: { + os: 'linux', + arch: 'amd64', + }, + steps: [ + { + image: 'plugins/manifest', + name: 'manifest-dockerhub', + settings: { + ignore_missing: true, + auto_tag: true, + username: { from_secret: 'docker_username' }, + password: { from_secret: 'docker_password' }, + spec: 'manifest.tmpl', + }, + when: { + status: ['success'], + }, + }, + { + image: 'plugins/manifest', + name: 'manifest-quay', + settings: { + ignore_missing: true, + auto_tag: true, + username: { from_secret: 'quay_username' }, + password: { from_secret: 'quay_password' }, + spec: 'manifest-quay.tmpl', + }, + when: { + status: ['success'], + }, + }, + { + name: 'pushrm-dockerhub', + pull: 'always', + image: 'chko/docker-pushrm:1', + environment: { + DOCKER_PASS: { + from_secret: 'docker_password', + }, + DOCKER_USER: { + from_secret: 'docker_username', + }, + PUSHRM_FILE: 'README.md', + PUSHRM_SHORT: 'Rootless Alpine base image', + PUSHRM_TARGET: 'thegeeklab/${DRONE_REPO_NAME}', + }, + when: { + status: ['success'], + }, + }, + { + name: 'pushrm-quay', + pull: 'always', + image: 'chko/docker-pushrm:1', + environment: { + APIKEY__QUAY_IO: { + from_secret: 'quay_token', + }, + PUSHRM_FILE: 'README.md', + PUSHRM_TARGET: 'quay.io/thegeeklab/${DRONE_REPO_NAME}', + }, + when: { + status: ['success'], + }, + }, + { + name: 'matrix', + image: 'plugins/matrix', + settings: { + homeserver: { from_secret: 'matrix_homeserver' }, + roomid: { from_secret: 'matrix_roomid' }, + template: 'Status: **{{ build.status }}**
Build: [{{ repo.Owner }}/{{ repo.Name }}]({{ build.link }}) ({{ build.branch }}) by {{ build.author }}
Message: {{ build.message }}', + username: { from_secret: 'matrix_username' }, + password: { from_secret: 'matrix_password' }, + }, + when: { + status: ['success', 'failure'], + }, + }, + ], + depends_on: [ + 'docs', + ], + trigger: { + ref: ['refs/heads/main', 'refs/tags/**'], + status: ['success', 'failure'], + }, +}; + +[ + PipelineTest, + PipelineBuildContainer(arch='amd64'), + PipelineBuildContainer(arch='arm64_v8'), + PipelineBuildContainer(arch='arm_v7'), + PipelineNotifications, +] diff --git a/.drone.yml b/.drone.yml index 8da4039..512afa5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -15,12 +15,12 @@ steps: trigger: ref: - refs/heads/main - - refs/pull/** - refs/tags/** + - refs/pull/** --- kind: pipeline -name: build-container +name: build-container-amd64 platform: os: linux @@ -30,7 +30,7 @@ steps: - name: wait-for image: thegeeklab/wait-for commands: - - wait-for dind:2376 + - wait-for dind-amd64:2376 environment: WAITFOR_TIMEOUT: 60 @@ -38,9 +38,9 @@ steps: image: jdrouet/docker-with-buildx:stable commands: - docker buildx create --use - - docker buildx build --platform linux/arm/v7,linux/arm64/v8,linux/amd64 --tag thegeeklab/buildx-alpine:latest . + - docker buildx build --platform linux/amd64 --tag thegeeklab/buildx-alpine:latest . volumes: - - name: dockersock + - name: dockersock-amd64 path: /var/run when: ref: @@ -67,15 +67,14 @@ steps: commands: - docker login -u "$$DOCKER_USERNAME" -p "$$DOCKER_PASSWORD" - docker buildx create --use - - docker buildx build --push --platform linux/amd64 --tag thegeeklab/buildx-alpine:latest . - - docker buildx build --push --platform linux/arm/v7 --tag thegeeklab/buildx-alpine:latest . + - docker buildx build --platform linux/amd64 --tag thegeeklab/buildx-alpine:latest-amd64 . environment: DOCKER_PASSWORD: from_secret: docker_password DOCKER_USERNAME: from_secret: docker_username volumes: - - name: dockersock + - name: dockersock-amd64 path: /var/run when: ref: @@ -84,38 +83,195 @@ steps: depends_on: - tags -- name: publish-gitea - image: plugins/gitea-release - settings: - api_key: - from_secret: gitea_token - base_url: https://gitea.rknet.org - note: CHANGELOG.md - overwrite: true - title: ${DRONE_TAG} - when: - ref: - - refs/tags/** - depends_on: - - publish-dockerhub - services: -- name: dind +- name: dind-amd64 image: docker:dind privileged: true volumes: - - name: dockersock + - name: dockersock-amd64 path: /var/run volumes: -- name: dockersock +- name: dockersock-amd64 temp: {} trigger: ref: - refs/heads/main - - refs/pull/** - refs/tags/** + - refs/pull/** + +depends_on: +- test + +--- +kind: pipeline +name: build-container-arm64_v8 + +platform: + os: linux + arch: amd64 + +steps: +- name: wait-for + image: thegeeklab/wait-for + commands: + - wait-for dind-arm64_v8:2376 + environment: + WAITFOR_TIMEOUT: 60 + +- name: dryrun + image: jdrouet/docker-with-buildx:stable + commands: + - docker buildx create --use + - docker buildx build --platform linux/arm64/v8 --tag thegeeklab/buildx-alpine:latest . + volumes: + - name: dockersock-arm64_v8 + path: /var/run + when: + ref: + - refs/pull/** + depends_on: + - wait-for + +- name: tags + image: thegeeklab/docker-autotag + environment: + DOCKER_AUTOTAG_FORCE_LATEST: True + DOCKER_AUTOTAG_IGNORE_PRERELEASE: True + DOCKER_AUTOTAG_OUTPUT_FILE: .tags + DOCKER_AUTOTAG_VERSION: ${DRONE_TAG} + when: + ref: + - refs/heads/main + - refs/tags/** + depends_on: + - wait-for + +- name: publish-dockerhub + image: jdrouet/docker-with-buildx:stable + commands: + - docker login -u "$$DOCKER_USERNAME" -p "$$DOCKER_PASSWORD" + - docker buildx create --use + - docker buildx build --platform linux/arm64/v8 --tag thegeeklab/buildx-alpine:latest-arm64 . + environment: + DOCKER_PASSWORD: + from_secret: docker_password + DOCKER_USERNAME: + from_secret: docker_username + volumes: + - name: dockersock-arm64_v8 + path: /var/run + when: + ref: + - refs/heads/main + - refs/tags/** + depends_on: + - tags + +services: +- name: dind-arm64_v8 + image: docker:dind + privileged: true + volumes: + - name: dockersock-arm64_v8 + path: /var/run + +volumes: +- name: dockersock-arm64_v8 + temp: {} + +trigger: + ref: + - refs/heads/main + - refs/tags/** + - refs/pull/** + +depends_on: +- test + +--- +kind: pipeline +name: build-container-arm_v7 + +platform: + os: linux + arch: amd64 + +steps: +- name: wait-for + image: thegeeklab/wait-for + commands: + - wait-for dind-arm_v7:2376 + environment: + WAITFOR_TIMEOUT: 60 + +- name: dryrun + image: jdrouet/docker-with-buildx:stable + commands: + - docker buildx create --use + - docker buildx build --platform linux/arm/v7 --tag thegeeklab/buildx-alpine:latest . + volumes: + - name: dockersock-arm_v7 + path: /var/run + when: + ref: + - refs/pull/** + depends_on: + - wait-for + +- name: tags + image: thegeeklab/docker-autotag + environment: + DOCKER_AUTOTAG_FORCE_LATEST: True + DOCKER_AUTOTAG_IGNORE_PRERELEASE: True + DOCKER_AUTOTAG_OUTPUT_FILE: .tags + DOCKER_AUTOTAG_VERSION: ${DRONE_TAG} + when: + ref: + - refs/heads/main + - refs/tags/** + depends_on: + - wait-for + +- name: publish-dockerhub + image: jdrouet/docker-with-buildx:stable + commands: + - docker login -u "$$DOCKER_USERNAME" -p "$$DOCKER_PASSWORD" + - docker buildx create --use + - docker buildx build --platform linux/arm/v7 --tag thegeeklab/buildx-alpine:latest-arm . + environment: + DOCKER_PASSWORD: + from_secret: docker_password + DOCKER_USERNAME: + from_secret: docker_username + volumes: + - name: dockersock-arm_v7 + path: /var/run + when: + ref: + - refs/heads/main + - refs/tags/** + depends_on: + - tags + +services: +- name: dind-arm_v7 + image: docker:dind + privileged: true + volumes: + - name: dockersock-arm_v7 + path: /var/run + +volumes: +- name: dockersock-arm_v7 + temp: {} + +trigger: + ref: + - refs/heads/main + - refs/tags/** + - refs/pull/** depends_on: - test @@ -129,6 +285,34 @@ platform: arch: amd64 steps: +- name: manifest-dockerhub + image: plugins/manifest + settings: + auto_tag: true + ignore_missing: true + password: + from_secret: docker_password + spec: manifest.tmpl + username: + from_secret: docker_username + when: + status: + - success + +- name: manifest-quay + image: plugins/manifest + settings: + auto_tag: true + ignore_missing: true + password: + from_secret: quay_password + spec: manifest-quay.tmpl + username: + from_secret: quay_username + when: + status: + - success + - name: pushrm-dockerhub pull: always image: chko/docker-pushrm:1 @@ -173,6 +357,9 @@ steps: - success - failure +image_pull_secrets: +- docker_config + trigger: ref: - refs/heads/main @@ -182,10 +369,6 @@ trigger: - failure depends_on: -- build-container - ---- -kind: signature -hmac: d62e2d1f1c7d48265f021c7581a4171ccbe70fdfca9569fa9733c915bc2fcde4 +- docs ...