Skip to content

Commit

Permalink
✨ feat: mutli stage
Browse files Browse the repository at this point in the history
dump dump

see #12
  • Loading branch information
duncdrum committed Dec 23, 2022
1 parent 5ce08b0 commit 90a2cce
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 35 deletions.
84 changes: 73 additions & 11 deletions .github/workflows/ci-java11.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ on: [push, pull_request]

env:
TEST_TAG: ${{ secrets.DOCKER_USERNAME }}/existdb:exist-ci
EXIST_VER: 6.0.1
# EXIST_VER: 6.0.1

jobs:
build:
Expand Down Expand Up @@ -42,14 +42,16 @@ jobs:
with:
install: true

- name: Install bats and Saxon
run: sudo apt-get install bats libsaxonb-java
- name: Install bats
# run: sudo apt-get install bats libsaxonb-java
run: sudo apt-get install bats

- name: Check local images
run: docker image ls

- name: Modify logging config
run: saxonb-xslt -s:dump/exist-distribution-${{ env.EXIST_VER }}/etc/log4j2.xml -xsl:log4j2-docker.xslt -o:log4j2.xml
# TODO(DP) needs adjusting for multi-stage see #5
# - name: Modify logging config
# run: saxonb-xslt -s:dump/exist-distribution-${{ env.EXIST_VER }}/etc/log4j2.xml -xsl:log4j2-docker.xslt -o:log4j2.xml

# BUILD
- name: Build default images for testing on CI
Expand Down Expand Up @@ -99,41 +101,101 @@ jobs:
- name: Run tests
run: bats --tap test/bats/*.bats

- name: Get SemVer string from test image
id: get_ver
run: |
echo "EXIST_VER=$(docker exec exist-ci java org.exist.start.Main client --no-gui --xpath 'system:get-version()' | grep -i 'eXist version' | cut -d ' ' -f 3)" >> $GITHUB_ENV
- name: Test GHA output
run: echo $EXIST_VER

# PUSH
- name: Build and publish :latest to Dockerhub
# Latest
- name: Push :latest to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile
build-args: BRANCH=develop
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:latest
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: Push :debug (latest) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile
build-args: |
DISTRO_TAG=debug
BRANCH=develop
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:debug
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: push :nonroot (latest) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile
build-args: |
DISTRO_TAG=nonroot
USR=nonroot:nonroot
BRANCH=develop
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:nonroot
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

# Release
- name: Push :release to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile
build-args: BRANCH=master
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}
${{ secrets.DOCKER_USERNAME }}/existdb:release
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: Build and publish :debug to Dockerhub
- name: Push :debug (release) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile
build-args: DISTRO_TAG=debug
build-args: |
DISTRO_TAG=debug
BRANCH=master
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:debug
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}-debug
${{ secrets.DOCKER_USERNAME }}/existdb:release-debug
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: Build and publish :nonroot to Dockerhub
- name: Push :nonroot (release) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
Expand All @@ -143,10 +205,10 @@ jobs:
build-args: |
DISTRO_TAG=nonroot
USR=nonroot:nonroot
BRANCH=master
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:nonroot
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}-nonroot
${{ secrets.DOCKER_USERNAME }}/existdb:release-nonroot
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
Expand Down
88 changes: 72 additions & 16 deletions .github/workflows/ci-java8.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,16 @@ jobs:
with:
install: true

- name: Install bats and Saxon
run: sudo apt-get install bats libsaxonb-java
- name: Install bats
# run: sudo apt-get install bats libsaxonb-java
run: sudo apt-get install bats

- name: Check local images
run: docker image ls

- name: Modify logging config
run: saxonb-xslt -s:dump/exist-distribution-${{ env.EXIST_VER }}/etc/log4j2.xml -xsl:log4j2-docker.xslt -o:log4j2.xml
# TODO(DP) needs adjusting for multi-stage see #5
# - name: Modify logging config
# run: saxonb-xslt -s:dump/exist-distribution-${{ env.EXIST_VER }}/etc/log4j2.xml -xsl:log4j2-docker.xslt -o:log4j2.xml

# BUILD
- name: Build local images for testing on CI
Expand Down Expand Up @@ -90,44 +92,45 @@ jobs:
- name: Run tests
run: bats --tap test/bats/*.bats

- name: Get SemVer string from test image
run: |
docker exec exist-ci java org.exist.start.Main client --no-gui --xpath "system:get-version()" | grep -i 'eXist version' | cut -d ' ' -f 3 > export EXIST_VER= $1
# PUSH
- name: Build and publish :latest to Dockerhub
# only publish from main
# Latest
- name: Push :latest to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile_j8
build-args: BRANCH=develop
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:latest-j8
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}-j8
${{ secrets.DOCKER_USERNAME }}/existdb:release-j8
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: Build and publish :debug to Dockerhub
# only publish from main
- name: Push :debug (latest) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile_j8
build-args: DISTRO_TAG=debug
build-args: |
DISTRO_TAG=debug
BRANCH=develop
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:debug-j8
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}-debug-j8
${{ secrets.DOCKER_USERNAME }}/existdb:release-debug-j8
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: Build and publish :nonroot to Dockerhub
# only publish from main
- name: push :nonroot (latest) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
Expand All @@ -137,11 +140,64 @@ jobs:
build-args: |
DISTRO_TAG=nonroot
USR=nonroot:nonroot
BRANCH=develop
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:nonroot-j8
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

# Release
- name: Push :release to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile_j8
build-args: BRANCH=master
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}-j8
${{ secrets.DOCKER_USERNAME }}/existdb:release-j8
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: Push :debug (release) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile_j8
build-args: |
DISTRO_TAG=debug
BRANCH=master
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}-debug-j8
${{ secrets.DOCKER_USERNAME }}/existdb:release-debug-j8
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max

- name: Push :nonroot (release) to Dockerhub
if: github.ref == 'refs/heads/main'
uses: docker/build-push-action@v3
with:
context: ./
platforms: linux/amd64,linux/arm64
file: ./Dockerfile_j8
build-args: |
DISTRO_TAG=nonroot
USR=nonroot:nonroot
BRANCH=master
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/existdb:${{ env.EXIST_VER }}-nonroot-j8
${{ secrets.DOCKER_USERNAME }}/existdb:release-nonroot-j8
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/existdb:buildcache,mode=max
23 changes: 19 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,30 @@
#

ARG DISTRO_TAG=latest

FROM maven:3-eclipse-temurin-11 as builder
ARG BRANCH=develop

# TODO (DP) add cache mount ?
RUN git clone --single-branch --branch=${BRANCH} --depth=1 https://github.com/eXist-db/exist.git

WORKDIR /exist

# Yay for buildkit
RUN --mount=type=cache,id=maven,target=/root/.m2 \
mvn -q -DskipTests -Ddocker=false -Ddependency-check.skip=true -Dmac.signing=false -Denv.CI=true -P '!mac-dmg-on-unix,!installer,!concurrency-stress-tests,!micro-benchmarks' package



FROM gcr.io/distroless/java11-debian11:${DISTRO_TAG}

ARG USR=root

# Copy eXist-db
COPY --chown=${USR} dump/exist-distribution-*/LICENSE /exist/LICENSE
COPY --chown=${USR} dump/exist-distribution-*/autodeploy /exist/autodeploy
COPY --chown=${USR} dump/exist-distribution-*/etc /exist/etc
COPY --chown=${USR} dump/exist-distribution-*/lib /exist/lib
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/LICENSE /exist/LICENSE
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/autodeploy /exist/autodeploy
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/etc /exist/etc
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/lib /exist/lib
COPY --chown=${USR} log4j2.xml /exist/etc


Expand Down
23 changes: 19 additions & 4 deletions Dockerfile_j8
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,21 @@
#

ARG DISTRO_TAG=latest

FROM maven:3-eclipse-temurin-11 as builder
ARG BRANCH=develop

# TODO (DP) add cache mount ?
RUN git clone --single-branch --branch=${BRANCH} --depth=1 https://github.com/eXist-db/exist.git

WORKDIR /exist

# Yay for buildkit
RUN --mount=type=cache,id=maven,target=/root/.m2 \
mvn -q -DskipTests -Ddocker=false -Ddependency-check.skip=true -Dmac.signing=false -Denv.CI=true -P '!mac-dmg-on-unix,!installer,!concurrency-stress-tests,!micro-benchmarks' package



FROM gcr.io/distroless/java-base-debian11:${DISTRO_TAG}

ARG USR=root
Expand All @@ -30,10 +45,10 @@ COPY --from=eclipse-temurin:8-jre --chown=${USR} $JAVA_HOME $JAVA_HOME
ENV PATH="${JAVA_HOME}/bin:${PATH}"

# Copy eXist-db
COPY --chown=${USR} dump/exist-distribution-*/LICENSE /exist/LICENSE
COPY --chown=${USR} dump/exist-distribution-*/autodeploy /exist/autodeploy
COPY --chown=${USR} dump/exist-distribution-*/etc /exist/etc
COPY --chown=${USR} dump/exist-distribution-*/lib /exist/lib
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/LICENSE /exist/LICENSE
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/autodeploy /exist/autodeploy
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/etc /exist/etc
COPY --from=builder --chown=${USR} /exist/exist-distribution/target/exist-distribution-*-dir/lib /exist/lib
COPY --chown=${USR} log4j2.xml /exist/etc


Expand Down

0 comments on commit 90a2cce

Please sign in to comment.