From 2ddf6516136060b5dfa6eefbd93aed3168c83e0f Mon Sep 17 00:00:00 2001
From: Tobias Gesellchen <tobias@gesellix.de>
Date: Sat, 30 Apr 2022 17:06:18 +0000
Subject: [PATCH] Release multi-platform Docker images (#222)
---
.github/workflows/deploy.yml | 2
.github/workflows/release.yml | 102 +++++++++++++++++-------
.github/workflows/build.yml | 91 ++++++++++++++++++----
3 files changed, 147 insertions(+), 48 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 15e2d32..ccfac85 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -15,7 +15,7 @@
java: [ '8', '11']
os: [ 'ubuntu-latest', 'macos-latest', 'windows-latest' ]
steps:
- - name: Install wine+rpm for ditribution
+ - name: Install wine+rpm for distribution
if: runner.os == 'Linux'
shell: bash
run: |
@@ -45,21 +45,6 @@
env:
MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10
run: mvn --batch-mode --errors --update-snapshots package --file pom.xml
- - name: Docker build
- if: runner.os == 'Linux'
- shell: bash
- run: |
- git fetch -t; export git_version_last="$(git describe --abbrev=0 --tags)" ; echo "last release: $git_version_last"
- docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile -t ${GITHUB_REPOSITORY,,}:$git_version_last --build-arg VERSION=$git_version_last
- docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile-alpine -t ${GITHUB_REPOSITORY,,}:$git_version_last-alpine --build-arg VERSION=$git_version_last
- - name: Docker test
- if: runner.os == 'Linux'
- shell: bash
- run: |
- git fetch -t; export git_version_last="$(git describe --abbrev=0 --tags)" ; echo "last release: $git_version_last, docker image: ${GITHUB_REPOSITORY,,}:$git_version_last"
- docker run --rm -it -d --name=opendj_1 --health-cmd='/opt/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "" --searchScope base "(objectClass=*)" 1.1 || /opt/opendj/bin/stop-ds || exit 1' --health-retries=10 --health-timeout=10s ${GITHUB_REPOSITORY,,}:$git_version_last
- timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj_1 | grep -q \"healthy\"; do sleep 10; done'
- docker stop opendj_1 || true
- name: Upload artifacts OpenDJ Server
uses: actions/upload-artifact@v3
with:
@@ -76,3 +61,77 @@
opendj-doc-generated-ref/target/*.zip
opendj-dsml-servlet/target/*.war
opendj-rest2ldap-servlet/target/*.war
+ build-docker:
+ name: Docker build
+ runs-on: 'ubuntu-latest'
+ services:
+ registry:
+ image: registry:2
+ ports:
+ - 5000:5000
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ submodules: recursive
+ - name: Get latest release version
+ shell: bash
+ run: |
+ git fetch -t; export git_version_last="$(git describe --abbrev=0 --tags)" ; echo "last release: $git_version_last"
+ echo "release_version=$git_version_last" >> $GITHUB_ENV
+ - name: Docker meta (default)
+ id: meta
+ uses: docker/metadata-action@v3
+ with:
+ images: |
+ localhost:5000/${{ github.repository }}
+ tags: |
+ type=raw,value=latest
+ type=raw,value=${{ env.release_version }}
+ - name: Docker meta (alpine)
+ id: meta_alpine
+ uses: docker/metadata-action@v3
+ with:
+ images: |
+ localhost:5000/${{ github.repository }}
+ tags: |
+ type=raw,value=alpine
+ type=raw,value=${{ env.release_version }}-alpine
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+ with:
+ driver-opts: network=host
+ - name: Build image (default)
+ uses: docker/build-push-action@v2
+ continue-on-error: true
+ with:
+ context: ./opendj-packages/opendj-docker
+ file: ./opendj-packages/opendj-docker/Dockerfile
+ build-args: |
+ VERSION=${{ env.release_version }}
+ platforms: linux/amd64,linux/arm64/8
+ push: true
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
+ - name: Build image (alpine)
+ continue-on-error: true
+ uses: docker/build-push-action@v2
+ with:
+ context: ./opendj-packages/opendj-docker
+ file: ./opendj-packages/opendj-docker/Dockerfile-alpine
+ build-args: |
+ VERSION=${{ env.release_version }}
+ platforms: linux/amd64,linux/arm64/8
+ push: true
+ tags: ${{ steps.meta_alpine.outputs.tags }}
+ labels: ${{ steps.meta_alpine.outputs.labels }}
+ - name: Docker test
+ shell: bash
+ run: |
+ export docker_image="localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}"
+ echo "last release: ${{ env.release_version }}, docker image: ${docker_image}"
+ docker run --rm -it -d --name=opendj_1 --health-cmd='/opt/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "" --searchScope base "(objectClass=*)" 1.1 || /opt/opendj/bin/stop-ds || exit 1' --health-retries=10 --health-timeout=10s ${docker_image}
+ timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj_1 | grep -q \"healthy\"; do sleep 10; done'
+ docker stop opendj_1 || true
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 852df8a..66ddd1b 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -15,7 +15,7 @@
env:
GITHUB_CONTEXT: ${{ toJSON(github) }}
run: echo "$GITHUB_CONTEXT"
- - name: Install wine+rpm for ditribution
+ - name: Install wine+rpm for distribution
if: runner.os == 'Linux'
shell: bash
run: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 26ef2e6..f719824 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -20,7 +20,7 @@
env:
GITHUB_CONTEXT: ${{ toJSON(github) }}
run: echo "$GITHUB_CONTEXT"
- - name: Install wine+rpm for ditribution
+ - name: Install wine+rpm for distribution
shell: bash
run: |
sudo dpkg --add-architecture i386
@@ -88,36 +88,6 @@
opendj-doc-generated-ref/target/*.zip
opendj-dsml-servlet/target/*.war
opendj-rest2ldap-servlet/target/*.war
- - name: Docker publish hub.docker.com
- env:
- DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
- DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
- if: ${{ env.DOCKER_PASSWORD!='' && env.DOCKER_USERNAME!=''}}
- continue-on-error: true
- shell: bash
- run: |
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
- docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile -t ${GITHUB_REPOSITORY,,} -t ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }} --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
- docker push ${GITHUB_REPOSITORY,,}
- docker push ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }}
- docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile-alpine -t ${GITHUB_REPOSITORY,,}:alpine -t ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }}-alpine --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
- docker push ${GITHUB_REPOSITORY,,}:alpine
- docker push ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }}-alpine
- - name: Docker publish docker.pkg.github.com
- continue-on-error: true
- shell: bash
- env:
- GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}
- GITHUB_ACTOR: ${{ github.actor }}
- GITHUB_TOKEN: ${{ github.token }}
- run: |
- echo "$GITHUB_TOKEN" | docker login -u "Open Identity Platform Community" docker.pkg.github.com --password-stdin
- docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,} -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:${{ github.event.inputs.releaseVersion }} --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
- docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}
- docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:${{ github.event.inputs.releaseVersion }}
- docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile-alpine -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:alpine -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:${{ github.event.inputs.releaseVersion }}-alpine --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
- docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:alpine
- docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:${{ github.event.inputs.releaseVersion }}-alpine
- uses: actions/checkout@v3
continue-on-error: true
with:
@@ -139,3 +109,73 @@
git tag -f ${{ github.event.inputs.releaseVersion }}
git push --quiet --force
git push --quiet --force origin ${{ github.event.inputs.releaseVersion }}
+ release-docker:
+ name: Docker release
+ runs-on: 'ubuntu-latest'
+ needs:
+ - release
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ ref: ${{ github.event.inputs.releaseVersion }}
+ fetch-depth: 1
+ submodules: recursive
+ - name: Docker meta (default)
+ id: meta
+ uses: docker/metadata-action@v3
+ with:
+ images: |
+ ${{ github.repository }}
+ ghcr.io/${{ github.repository }}/${{ github.event.repository.name }}
+ tags: |
+ type=raw,value=latest
+ type=raw,value=${{ github.event.inputs.releaseVersion }}
+ - name: Docker meta (alpine)
+ id: meta_alpine
+ uses: docker/metadata-action@v3
+ with:
+ images: |
+ ${{ github.repository }}
+ ghcr.io/${{ github.repository }}/${{ github.event.repository.name }}
+ tags: |
+ type=raw,value=alpine
+ type=raw,value=${{ github.event.inputs.releaseVersion }}-alpine
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+ - name: Login to DockerHub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+ - name: Login to GHCR
+ uses: docker/login-action@v1
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Build and push image (default)
+ uses: docker/build-push-action@v2
+ continue-on-error: true
+ with:
+ context: ./opendj-packages/opendj-docker
+ file: ./opendj-packages/opendj-docker/Dockerfile
+ build-args: |
+ VERSION=${{ github.event.inputs.releaseVersion }}
+ platforms: linux/amd64,linux/arm64/8
+ push: true
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
+ - name: Build and push image (alpine)
+ continue-on-error: true
+ uses: docker/build-push-action@v2
+ with:
+ context: ./opendj-packages/opendj-docker
+ file: ./opendj-packages/opendj-docker/Dockerfile-alpine
+ build-args: |
+ VERSION=${{ github.event.inputs.releaseVersion }}
+ platforms: linux/amd64,linux/arm64/8
+ push: true
+ tags: ${{ steps.meta_alpine.outputs.tags }}
+ labels: ${{ steps.meta_alpine.outputs.labels }}
--
Gitblit v1.10.0