diff --git a/.drone.jsonnet b/.drone.jsonnet new file mode 100644 index 0000000..7710475 --- /dev/null +++ b/.drone.jsonnet @@ -0,0 +1,155 @@ +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-' + std.split(arch, '_')[0], + platform: { + os: 'linux', + arch: 'amd64', + }, + steps: [ + { + 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}', + DOCKER_AUTOTAG_SUFFIX: std.split(arch, '_')[0], + }, + }, + { + name: 'dryrun', + image: 'thegeeklab/drone-docker-buildx:20', + privileged: true, + settings: { + dry_run: true, + dockerfile: 'Dockerfile.' + std.split(arch, '_')[0], + platforms: [ + 'linux/' + std.strReplace(arch, '_', '/'), + ], + repo: 'thegeeklab/${DRONE_REPO_NAME}', + username: { from_secret: 'docker_username' }, + password: { from_secret: 'docker_password' }, + }, + depends_on: ['tags'], + when: { + ref: ['refs/pull/**'], + }, + }, + { + name: 'publish-dockerhub', + image: 'thegeeklab/drone-docker-buildx:20', + settings: { + dockerfile: 'Dockerfile.' + std.split(arch, '_')[0], + repo: 'thegeeklab/${DRONE_REPO_NAME}', + username: { from_secret: 'docker_username' }, + password: { from_secret: 'docker_password' }, + }, + when: { + ref: ['refs/heads/main', 'refs/tags/**'], + }, + depends_on: ['tags'], + }, + ], + depends_on: [ + 'test', + ], + trigger: { + ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'], + }, +}; + +local PipelineNotifications = { + kind: 'pipeline', + name: 'notifications', + platform: { + os: 'linux', + arch: 'amd64', + }, + steps: [ + { + image: 'plugins/manifest', + name: 'manifest-dockerhub', + settings: { + ignore_missing: true, + username: { from_secret: 'docker_username' }, + password: { from_secret: 'docker_password' }, + spec: 'manifest.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: 'Custom Alpine image including a common toolset', + PUSHRM_TARGET: '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: [ + 'build-container-amd64', + 'build-container-arm64', + 'build-container-arm', + ], + 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 4e78009..a88e8b0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -15,48 +15,50 @@ steps: trigger: ref: - refs/heads/main - - refs/pull/** - refs/tags/** + - refs/pull/** --- kind: pipeline -name: build-container +name: build-container-amd64 platform: os: linux arch: amd64 steps: -- name: dryrun - image: thegeeklab/drone-docker:19 - settings: - dockerfile: Dockerfile - dry_run: true - password: - from_secret: docker_password - repo: thegeeklab/${DRONE_REPO_NAME} - username: - from_secret: docker_username - 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_SUFFIX: amd64 DOCKER_AUTOTAG_VERSION: ${DRONE_TAG} + +- name: dryrun + image: thegeeklab/drone-docker-buildx:20 + settings: + dockerfile: Dockerfile.amd64 + dry_run: true + password: + from_secret: docker_password + platforms: + - linux/amd64 + repo: thegeeklab/${DRONE_REPO_NAME} + username: + from_secret: docker_username + privileged: true when: ref: - - refs/heads/main - - refs/tags/** + - refs/pull/** + depends_on: + - tags - name: publish-dockerhub - image: thegeeklab/drone-docker:19 + image: thegeeklab/drone-docker-buildx:20 settings: - dockerfile: Dockerfile + dockerfile: Dockerfile.amd64 password: from_secret: docker_password repo: thegeeklab/${DRONE_REPO_NAME} @@ -69,16 +71,61 @@ steps: depends_on: - tags -- name: publish-quay - image: thegeeklab/drone-docker:19 +trigger: + ref: + - refs/heads/main + - refs/tags/** + - refs/pull/** + +depends_on: +- test + +--- +kind: pipeline +name: build-container-arm64 + +platform: + os: linux + arch: amd64 + +steps: +- name: tags + image: thegeeklab/docker-autotag + environment: + DOCKER_AUTOTAG_FORCE_LATEST: True + DOCKER_AUTOTAG_IGNORE_PRERELEASE: True + DOCKER_AUTOTAG_OUTPUT_FILE: .tags + DOCKER_AUTOTAG_SUFFIX: arm64 + DOCKER_AUTOTAG_VERSION: ${DRONE_TAG} + +- name: dryrun + image: thegeeklab/drone-docker-buildx:20 settings: - dockerfile: Dockerfile + dockerfile: Dockerfile.arm64 + dry_run: true password: - from_secret: quay_password - registry: quay.io - repo: quay.io/thegeeklab/${DRONE_REPO_NAME} + from_secret: docker_password + platforms: + - linux/arm64/v8 + repo: thegeeklab/${DRONE_REPO_NAME} username: - from_secret: quay_username + from_secret: docker_username + privileged: true + when: + ref: + - refs/pull/** + depends_on: + - tags + +- name: publish-dockerhub + image: thegeeklab/drone-docker-buildx:20 + settings: + dockerfile: Dockerfile.arm64 + password: + from_secret: docker_password + repo: thegeeklab/${DRONE_REPO_NAME} + username: + from_secret: docker_username when: ref: - refs/heads/main @@ -86,27 +133,73 @@ steps: depends_on: - tags -- name: publish-gitea - image: plugins/gitea-release +trigger: + ref: + - refs/heads/main + - refs/tags/** + - refs/pull/** + +depends_on: +- test + +--- +kind: pipeline +name: build-container-arm + +platform: + os: linux + arch: amd64 + +steps: +- name: tags + image: thegeeklab/docker-autotag + environment: + DOCKER_AUTOTAG_FORCE_LATEST: True + DOCKER_AUTOTAG_IGNORE_PRERELEASE: True + DOCKER_AUTOTAG_OUTPUT_FILE: .tags + DOCKER_AUTOTAG_SUFFIX: arm + DOCKER_AUTOTAG_VERSION: ${DRONE_TAG} + +- name: dryrun + image: thegeeklab/drone-docker-buildx:20 settings: - api_key: - from_secret: gitea_token - base_url: https://gitea.rknet.org - note: CHANGELOG.md - overwrite: true - title: ${DRONE_TAG} + dockerfile: Dockerfile.arm + dry_run: true + password: + from_secret: docker_password + platforms: + - linux/arm/v7 + repo: thegeeklab/${DRONE_REPO_NAME} + username: + from_secret: docker_username + privileged: true when: ref: + - refs/pull/** + depends_on: + - tags + +- name: publish-dockerhub + image: thegeeklab/drone-docker-buildx:20 + settings: + dockerfile: Dockerfile.arm + password: + from_secret: docker_password + repo: thegeeklab/${DRONE_REPO_NAME} + username: + from_secret: docker_username + when: + ref: + - refs/heads/main - refs/tags/** depends_on: - - publish-dockerhub - - publish-quay + - tags trigger: ref: - refs/heads/main - - refs/pull/** - refs/tags/** + - refs/pull/** depends_on: - test @@ -120,6 +213,19 @@ platform: arch: amd64 steps: +- name: manifest-dockerhub + image: plugins/manifest + settings: + ignore_missing: true + password: + from_secret: docker_password + spec: manifest.tmpl + username: + from_secret: docker_username + when: + status: + - success + - name: pushrm-dockerhub pull: always image: chko/docker-pushrm:1 @@ -135,18 +241,6 @@ steps: 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: @@ -173,10 +267,12 @@ trigger: - failure depends_on: -- build-container +- build-container-amd64 +- build-container-arm64 +- build-container-arm --- kind: signature -hmac: 58d4cdfd124567d8709928b7b52ded08b0f66e44d08d0f7ac91d9a46bb3c85b7 +hmac: cc30669d3e6cdff969833ae039e9fdcc8a4c49f1f1043c44170e458433d36727 ... diff --git a/Dockerfile b/Dockerfile.amd64 similarity index 93% rename from Dockerfile rename to Dockerfile.amd64 index b9ddc9f..1c484a2 100644 --- a/Dockerfile +++ b/Dockerfile.amd64 @@ -1,4 +1,4 @@ -FROM alpine:3.12@sha256:074d3636ebda6dd446d0d00304c4454f468237fdacf08fb0eeac90bdbfa1bac7 +FROM amd64/alpine:3.13 LABEL maintainer="Robert Kaussow " LABEL org.opencontainers.image.authors="Robert Kaussow " diff --git a/Dockerfile.arm b/Dockerfile.arm new file mode 100644 index 0000000..6531bbf --- /dev/null +++ b/Dockerfile.arm @@ -0,0 +1,31 @@ +FROM arm32v7/alpine:3.12 + +LABEL maintainer="Robert Kaussow " +LABEL org.opencontainers.image.authors="Robert Kaussow " +LABEL org.opencontainers.image.title="alpine-tools" +LABEL org.opencontainers.image.url="https://gitea.rknet.org/docker/alpine-tools" +LABEL org.opencontainers.image.source="https://gitea.rknet.org/docker/alpine-tools" +LABEL org.opencontainers.image.documentation="https://gitea.rknet.org/docker/alpine-tools" + +ARG GOMPLATE_VERSION +ARG SUPERCRONIC_VERSION +ARG URL_PARSER_VERSION + +# renovate: datasource=github-releases depName=hairyhenderson/gomplate +ENV GOMPLATE_VERSION="${GOMPLATE_VERSION:-v3.8.0}" +# renovate: datasource=github-releases depName=thegeeklab/url-parser +ENV URL_PARSER_VERSION="${URL_PARSER_VERSION:-v0.2.1}" + +RUN apk --update add curl make tar git && \ + curl -SsL -o /usr/local/bin/gomplate "https://github.com/hairyhenderson/gomplate/releases/download/${GOMPLATE_VERSION}/gomplate_linux-amd64-slim" && \ + curl -SsL -o /usr/local/bin/url-parser "https://github.com/thegeeklab/url-parser/releases/download/${URL_PARSER_VERSION}/url-parser-linux-amd64" && \ + chmod 755 /usr/local/bin/gomplate && \ + chmod 755 /usr/local/bin/url-parser && \ + rm -rf /var/cache/apk/* && \ + rm -rf /tmp/* + +ADD overlay/ / + +STOPSIGNAL SIGTERM + +CMD [] diff --git a/Dockerfile.arm64 b/Dockerfile.arm64 new file mode 100644 index 0000000..79b1ce4 --- /dev/null +++ b/Dockerfile.arm64 @@ -0,0 +1,31 @@ +FROM arm64v8/alpine:3.13 + +LABEL maintainer="Robert Kaussow " +LABEL org.opencontainers.image.authors="Robert Kaussow " +LABEL org.opencontainers.image.title="alpine-tools" +LABEL org.opencontainers.image.url="https://gitea.rknet.org/docker/alpine-tools" +LABEL org.opencontainers.image.source="https://gitea.rknet.org/docker/alpine-tools" +LABEL org.opencontainers.image.documentation="https://gitea.rknet.org/docker/alpine-tools" + +ARG GOMPLATE_VERSION +ARG SUPERCRONIC_VERSION +ARG URL_PARSER_VERSION + +# renovate: datasource=github-releases depName=hairyhenderson/gomplate +ENV GOMPLATE_VERSION="${GOMPLATE_VERSION:-v3.8.0}" +# renovate: datasource=github-releases depName=thegeeklab/url-parser +ENV URL_PARSER_VERSION="${URL_PARSER_VERSION:-v0.2.1}" + +RUN apk --update add curl make tar git && \ + curl -SsL -o /usr/local/bin/gomplate "https://github.com/hairyhenderson/gomplate/releases/download/${GOMPLATE_VERSION}/gomplate_linux-amd64-slim" && \ + curl -SsL -o /usr/local/bin/url-parser "https://github.com/thegeeklab/url-parser/releases/download/${URL_PARSER_VERSION}/url-parser-linux-amd64" && \ + chmod 755 /usr/local/bin/gomplate && \ + chmod 755 /usr/local/bin/url-parser && \ + rm -rf /var/cache/apk/* && \ + rm -rf /tmp/* + +ADD overlay/ / + +STOPSIGNAL SIGTERM + +CMD [] diff --git a/manifest.tmpl b/manifest.tmpl new file mode 100644 index 0000000..927d354 --- /dev/null +++ b/manifest.tmpl @@ -0,0 +1,24 @@ +image: thegeeklab/alpine-tools:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} +{{#if build.tags}} +tags: +{{#each build.tags}} + - {{this}} +{{/each}} +{{/if}} +manifests: + - image: thegeeklab/alpine-tools:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}amd64 + platform: + architecture: amd64 + os: linux + + - image: thegeeklab/alpine-tools:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}arm64 + platform: + architecture: arm64 + os: linux + variant: v8 + + - image: thegeeklab/alpine-tools:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}arm + platform: + architecture: arm + os: linux + variant: v7