Skip to content

ci: test the publish workflow in PRs if changed #230

ci: test the publish workflow in PRs if changed

ci: test the publish workflow in PRs if changed #230

Workflow file for this run

name: Publish
on:
push:
tags:
- '[0-9]+.[0-9]+.[0-9]+*'
workflow_dispatch:
# Test this workflow in PRs in case it changed
pull_request:
paths:
- .github/workflows/publish.yml
jobs:
newRelease:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.3.0'
registry-url: 'https://artifacts.itemis.cloud/repository/npm-open/'
scope: '<@modelix>'
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: Set up Gradle
uses: gradle/gradle-build-action@v2
- name: Use tag as version
# Set a production version only when running on tags
if: ${{ github.event_name != 'pull_request' }}
run: echo "${GITHUB_REF#refs/*/}" > version.txt
- name: Use dummy version for PR
# Set a dummy version that doesn't hurt if accidentally released
if: ${{ github.event_name == 'pull_request' }}
run: echo "0.0.1-SNAPSHOT" > version.txt
# 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" = 'false' ]]; then
TARGET=publish
fi
echo ./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' }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
platforms: linux/amd64,linux/arm64
- name: Build and Publish Docker
# As publishing is currently baked into the scripts, we can't test this
# in PRs
if: ${{ github.event_name != 'pull_request' }}
env:
DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }}
DOCKER_HUB_KEY: ${{ secrets.DOCKER_HUB_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./docker-ci.sh