Skip to content

Commit

Permalink
Change builder docker image to eclipse-temurin, add multi-platform do…
Browse files Browse the repository at this point in the history
…cker build
  • Loading branch information
davidgamez committed Jul 5, 2023
1 parent b148d7b commit 9bdd288
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 41 deletions.
151 changes: 112 additions & 39 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Docker image

on:
push:
branches: [ master ]
branches: [ master, feat/multiple-docker-platforms ]
release:
types: [ prereleased, released ]

Expand All @@ -12,36 +12,113 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: gradle/wrapper-validation-action@v1
test:
needs: [ validate_gradle_wrapper ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Run Java tests
uses: gradle/gradle-build-action@v2
with:
arguments: testAggregateTestReport
- name: Persist aggregated test reports on failure
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: Test report - Java
path: build/reports/tests/unit-test/aggregated-results/
# test:
# needs: [ validate_gradle_wrapper ]
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
# - name: Set up JDK 11
# uses: actions/setup-java@v3
# with:
# java-version: '11'
# distribution: 'temurin'
# - name: Cache Gradle packages
# uses: actions/cache@v3
# with:
# path: ~/.gradle/caches
# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
# restore-keys: ${{ runner.os }}-gradle
# - name: Run Java tests
# uses: gradle/gradle-build-action@v2
# with:
# arguments: testAggregateTestReport
# - name: Persist aggregated test reports on failure
# if: ${{ failure() }}
# uses: actions/upload-artifact@v3
# with:
# name: Test report - Java
# path: build/reports/tests/unit-test/aggregated-results/

build_push:
needs: test
name: Build and push Docker image
# build_test:
# needs: test
# name: Build and test Docker
# runs-on: ubuntu-latest
# strategy:
# matrix:
# platform: [amd64 , arm64]
# steps:
# - uses: actions/checkout@v3
# with:
# fetch-depth: 0 # need full clone so `./gradlew currentVersion` can search parents for older tags when needed
# - name: Set up JDK 11
# uses: actions/setup-java@v3
# with:
# java-version: '11'
# distribution: 'temurin'
# - name: Cache Gradle packages
# uses: actions/cache@v3
# with:
# path: ~/.gradle/caches
# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
# restore-keys: ${{ runner.os }}-gradle
# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v2
# - name: Login to GitHub Container Registry
# uses: docker/login-action@v1
# with:
# registry: ghcr.io
# username: ${{ github.repository_owner }}
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: Initialize Gradle
# run: |
# # The first time gradlew is invoked it downloads gradle and outputs progress about that to STDOUT.
# # This "dummy" invokation gets that out of the way so future gradlew commands have clean output
# ./gradlew --version
# - name: Prepare version metadata
# id: prep
# run: |
# # ghcr.io path should match current repo but be all lowercase
# DOCKER_IMAGE=ghcr.io/${GITHUB_REPOSITORY,,}
# echo "Set DOCKER_IMAGE=${DOCKER_IMAGE}"
#
# # delegate to axion-release-plugin to generate version string from Git repository state
# echo "Detecting version with ./gradlew currentVersion"
# AXION_VERSION="$(./gradlew currentVersion -q -Prelease.quiet)"
# echo "Set AXION_VERSION=${AXION_VERSION}"
#
# # determine docker tags
# if [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
# # tag releases with version determined by axion-release-plugin
# DOCKER_TAGS="${DOCKER_IMAGE}:${AXION_VERSION}"
# else
# # tag pushes to master as "latest"
# DOCKER_TAGS="${DOCKER_IMAGE}:latest"
# fi
# echo "Set DOCKER_TAGS=${DOCKER_TAGS}"
#
# echo ::set-output name=version::${AXION_VERSION}
# echo ::set-output name=tags::${DOCKER_TAGS}
# echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
#
# - name: Build Docker container image
# uses: docker/build-push-action@v3
# with:
# context: .
# file: ./Dockerfile
# build-args: |
# VERSION_TAG=${{ steps.prep.outputs.version }}
# load: true
# platforms: linux/amd64, linux/arm64
# tags: ${{ steps.prep.outputs.tags }}
# labels: |
# org.opencontainers.image.source=https://github.com/${GITHUB_REPOSITORY,,}.git
# org.opencontainers.image.created=${{ steps.prep.outputs.created }}
# org.opencontainers.image.revision=${{ github.sha }}
# org.opencontainers.image.version=${{ steps.prep.outputs.version }}
# - name: Test Docker container image
# run: docker run --rm ${{ steps.prep.outputs.tags }} --help
push_multiplatform:
name: Build/Push multi-platform image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
Expand Down Expand Up @@ -96,26 +173,21 @@ jobs:
echo ::set-output name=version::${AXION_VERSION}
echo ::set-output name=tags::${DOCKER_TAGS}
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
# Build and push steps are split up in order to test the built contaire image in between
# - build-args and labels inputs _must_ be kept matching between both to prevent rebuild
# - See: https://github.com/docker/build-push-action/blob/master/docs/advanced/test-before-push.md
- name: Build Docker container image
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile
build-args: |
VERSION_TAG=${{ steps.prep.outputs.version }}
load: true
tags: ${{ steps.prep.outputs.tags }}
load: false
platforms: linux/amd64, linux/arm64
tags: ${{ steps.prep.outputs.tags }}-test-multiplat
labels: |
org.opencontainers.image.source=https://github.com/${GITHUB_REPOSITORY,,}.git
org.opencontainers.image.created=${{ steps.prep.outputs.created }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.version=${{ steps.prep.outputs.version }}
- name: Test Docker container image
run: docker run --rm ${{ steps.prep.outputs.tags }} --help
- name: Push Docker container image
uses: docker/build-push-action@v3
with:
Expand All @@ -124,7 +196,8 @@ jobs:
build-args: |
VERSION_TAG=${{ steps.prep.outputs.version }}
push: true
tags: ${{ steps.prep.outputs.tags }}
platforms: linux/amd64,linux/arm64
tags: ${{ steps.prep.outputs.tags }}-test-multiplat
labels: |
org.opencontainers.image.source=https://github.com/${GITHUB_REPOSITORY,,}.git
org.opencontainers.image.created=${{ steps.prep.outputs.created }}
Expand Down
6 changes: 4 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
FROM gradle:7-jdk11-alpine AS build
# FROM --platform=$BUILDPLATFORM gradle:7-jdk11-alpine AS build

FROM --platform=$BUILDPLATFORM eclipse-temurin:11 AS build

COPY --chown=gradle:gradle . /build
WORKDIR /build
Expand All @@ -9,7 +11,7 @@ RUN ./gradlew shadowJar \
-Prelease.forceVersion="${VERSION_TAG%-SNAPSHOT}"


FROM openjdk:11-slim
FROM --platform=$BUILDPLATFORM openjdk:11-slim
COPY --from=build /build/cli/build/libs/gtfs-validator-*-cli.jar /gtfs-validator-cli.jar
WORKDIR /

Expand Down
18 changes: 18 additions & 0 deletions Dockerfile_arm64v8
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
FROM arm64v8/gradle:7-jdk11 AS build

COPY --chown=gradle:gradle . /build
WORKDIR /build

ARG VERSION_TAG
RUN ./gradlew shadowJar \
--no-daemon \
-Prelease.forceVersion="${VERSION_TAG%-SNAPSHOT}"


FROM openjdk:11-slim
COPY --from=build /build/cli/build/libs/gtfs-validator-*-cli.jar /gtfs-validator-cli.jar
WORKDIR /

ARG VERSION_TAG
ENV VERSION_TAG=$VERSION_TAG
ENTRYPOINT [ "java", "-jar", "gtfs-validator-cli.jar" ]

0 comments on commit 9bdd288

Please sign in to comment.