Skip to content

Publish

Publish #415

Workflow file for this run

name: Publish
on:
push:
tags:
- '[0-9]+.[0-9]+.[0-9]+*'
# Allows building SNAPSHOT releases with the commit SHA inlcuded for testing purposes
workflow_dispatch:
# Test this workflow in PRs in case it changed
pull_request:
paths:
- .github/workflows/publish.yml
jobs:
newRelease:
runs-on: ubuntu-latest
timeout-minutes: 60
permissions:
contents: read
packages: write
env:
# We only push the resulting image when we are on release tag (i.e., the only time we have a push event) or on
# manual request via the workflow_dispatch event.
PUSH: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'push' }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18.3.0'
registry-url: 'https://artifacts.itemis.cloud/repository/npm-open/'
scope: '<@modelix>'
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v3
- name: Configure the project version
id: version
run: |-
if [[ "${{ github.event_name }}" == 'pull_request' || "${{ github.event_name }}" == 'workflow_dispatch' ]]; then
version="0.0.1-${GITHUB_SHA:0:7}-SNAPSHOT"
else
version="${GITHUB_REF#refs/*/}"
fi
echo "${version}" > version.txt
cat version.txt
echo "VERSION=${version}" >> $GITHUB_OUTPUT
- name: Determine Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: |
modelix/model-server
modelix/modelix-model
tags: |
type=raw,value=${{ steps.version.outputs.VERSION }},enable=true
type=raw,value=latest,enable=${{ github.event_name == 'push' }}
# Perform the build in a separate call to avoid trying to publish
# something where the build already failed partially. This could happen
# due to the use of the --continue flag in the publish step.
- name: Build
run: >-
./gradlew --build-cache build
--info
-PciBuild=true
- name: Publish
# We run gradle with --info to debug the ongoing random publishing
# issues. Gradle would log upload retries on info level:
# https://github.com/gradle/gradle/blob/2e843f089f969940e505e69eb0742ed4fbf67993/platforms/software/dependency-management/src/main/java/org/gradle/api/internal/artifacts/repositories/transport/NetworkOperationBackOffAndRetry.java#L64
# Maybe retries are the source of our duplicate publication attempts.
#
# We use --continue to work around the commonly seen 403 issues.
# Usually, the artifact that cannot be uploaded is strangely already
# in the repo. As the result, by ignoring the exception, we should end
# up with a working release in most cases.
run: |-
if [[ "$IS_PR" = 'true' ]]; then
TARGET=publishToMavenLocal
else
TARGET=publish
fi
./gradlew --build-cache $TARGET \
--continue \
--info \
-PciBuild=true \
-Partifacts.itemis.cloud.user=${{ secrets.ARTIFACTS_ITEMIS_CLOUD_USER }} \
-Partifacts.itemis.cloud.pw=${{ secrets.ARTIFACTS_ITEMIS_CLOUD_PW }} \
-Pgpr.user=${{ github.actor }} \
-Pgpr.key=${{ secrets.GITHUB_TOKEN }} \
-Pgpr.universalkey=${{ secrets.GHP_UNIVERSAL_PUBLISH_TOKEN }} \
-Porg.gradle.internal.http.connectionTimeout=180000 \
-Porg.gradle.internal.http.socketTimeout=180000
env:
NODE_AUTH_TOKEN: ${{ secrets.ARTIFACTS_ITEMIS_CLOUD_NPM_TOKEN }}
IS_PR: ${{ github.event_name == 'pull_request' }}
# Try to log in early. If this fails, there's no reason to perform the remaining steps
- name: Log in to Docker Hub
# Only attempt to log in if we later attempt to push.
if: ${{ env.PUSH }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_KEY }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
platforms: linux/amd64,linux/arm64
- name: Build and publish model-server Docker image
uses: docker/build-push-action@v6
with:
context: ./model-server
file: ./model-server/Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ env.PUSH }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}