Skip to content

build

build #22294

Workflow file for this run

name: build
on:
push:
branches:
- main
pull_request: { }
schedule:
- cron: '13/15 * * * *'
workflow_dispatch:
inputs:
min:
required: false
description: Min Gradle version
max:
required: false
description: Max Gradle version
defaults:
run:
shell: bash
env:
GRADLE_OPTS: -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=4 -Dorg.gradle.warning.mode=all -Dhttp.keepAlive=false -Dsun.net.client.defaultConnectTimeout=15000 -Dsun.net.client.defaultReadTimeout=600000 -Dsun.net.http.retryPost=false -Dsun.io.useCanonCaches=false -Djava.awt.headless=true -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false
jobs:
retrieve-gradle-versions:
if: ${{ !startsWith(github.event.head_commit.message, '[skip ci]') && !startsWith(github.event.head_commit.message, '[push-back]') }}
runs-on: ubuntu-latest
timeout-minutes: 5
concurrency: retrieve-gradle-versions
outputs:
gradle-versions: ${{ steps.create-output.outputs.result }}
steps:
- name: Retrieve Gradle versions
id: retrieve-gradle-versions
uses: remal-github-actions/retrieve-gradle-versions@v1
with:
min: '3.0, ${{ github.event.inputs.min }}'
max: '${{ github.event.inputs.max }}'
- name: Select Gradle versions
id: select-gradle-versions
env:
VERSIONS: ${{ steps.retrieve-gradle-versions.outputs.allAndRC }}
run: |
echo "result=$VERSIONS" >> $GITHUB_OUTPUT
- name: Retrieve Maven artifact versions - Local Groovy
id: retrieve-maven-artifact-versions-local-groovy
uses: remal-github-actions/retrieve-maven-artifact-versions@v1
with:
group: name.remal.gradle-api
name: local-groovy
repository: https://maven.pkg.github.com/remal-gradle-api/packages
user: ${{ github.actor }}
password: ${{ github.token }}
- name: Retrieve Maven artifact versions - Gradle API
id: retrieve-maven-artifact-versions-gradle-api
uses: remal-github-actions/retrieve-maven-artifact-versions@v1
with:
group: name.remal.gradle-api
name: gradle-api
repository: https://maven.pkg.github.com/remal-gradle-api/packages
user: ${{ github.actor }}
password: ${{ github.token }}
- name: Retrieve Maven artifact versions - Gradle Test Kit
id: retrieve-maven-artifact-versions-gradle-test-kit
uses: remal-github-actions/retrieve-maven-artifact-versions@v1
with:
group: name.remal.gradle-api
name: gradle-test-kit
repository: https://maven.pkg.github.com/remal-gradle-api/packages
user: ${{ github.actor }}
password: ${{ github.token }}
- name: Filter Gradle versions
id: filter-gradle-versions
uses: actions/github-script@v7
if: ${{ steps.retrieve-maven-artifact-versions-local-groovy.outcome == 'success' || steps.retrieve-maven-artifact-versions-gradle-api.outcome == 'success' || steps.retrieve-maven-artifact-versions-gradle-test-kit.outcome == 'success' }}
env:
GRADLE_VERSIONS_JSON: ${{ steps.select-gradle-versions.outputs.result }}
LOCAL_GROOVY_MAVEN_ARTIFACT_VERSIONS_JSON: ${{ steps.retrieve-maven-artifact-versions-local-groovy.outputs.unstable }}
GRADLE_API_MAVEN_ARTIFACT_VERSIONS_JSON: ${{ steps.retrieve-maven-artifact-versions-gradle-api.outputs.unstable }}
GRADLE_TEST_KIT_MAVEN_ARTIFACT_VERSIONS_JSON: ${{ steps.retrieve-maven-artifact-versions-gradle-test-kit.outputs.unstable }}
with:
script: |
const { GRADLE_VERSIONS_JSON, LOCAL_GROOVY_MAVEN_ARTIFACT_VERSIONS_JSON, GRADLE_API_MAVEN_ARTIFACT_VERSIONS_JSON, GRADLE_TEST_KIT_MAVEN_ARTIFACT_VERSIONS_JSON } = process.env
const gradleVersions = JSON.parse(GRADLE_VERSIONS_JSON)
const localGroovyMavenArtifactVersions = JSON.parse(LOCAL_GROOVY_MAVEN_ARTIFACT_VERSIONS_JSON)
const gradleApiMavenArtifactVersions = JSON.parse(GRADLE_API_MAVEN_ARTIFACT_VERSIONS_JSON)
const gradleTestKitMavenArtifactVersions = JSON.parse(GRADLE_TEST_KIT_MAVEN_ARTIFACT_VERSIONS_JSON)
const mavenArtifactVersions = localGroovyMavenArtifactVersions.concat(gradleApiMavenArtifactVersions).concat(gradleTestKitMavenArtifactVersions)
mavenArtifactVersions.forEach(version => {
if (!localGroovyMavenArtifactVersions.includes(version)) return
if (!gradleApiMavenArtifactVersions.includes(version)) return
if (!gradleTestKitMavenArtifactVersions.includes(version)) return
const index = gradleVersions.indexOf(version)
if (index >= 0) {
core.info(`Version ${version} has already been fully published`)
gradleVersions.splice(index, 1)
}
})
return gradleVersions
- name: Create output
id: create-output
uses: actions/github-script@v7
env:
FILTER_OUTPUT: ${{ steps.filter-gradle-versions.outputs.result }}
SELECT_OUTPUT: ${{ steps.select-gradle-versions.outputs.result }}
with:
script: |
const { FILTER_OUTPUT, SELECT_OUTPUT } = process.env
let versions = []
if ('${{ steps.filter-gradle-versions.outcome }}' === 'success') {
versions = JSON.parse(FILTER_OUTPUT)
} else {
versions = JSON.parse(SELECT_OUTPUT)
}
versions.reverse()
if (!versions.length) {
core.info('No versions to publish')
versions.push('') // versions array can't be ampty, as it causes 'build' stage to fail
}
return versions
populate-cache:
runs-on: ubuntu-latest
timeout-minutes: 15
concurrency: populate-cache
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Cache
id: cache
uses: actions/cache@v4
with:
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/wrapper/**', '**/*.gradle') }}
path: |
~/.gradle
- name: Setup Java 8
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
uses: actions/setup-java@v4
with:
java-version: 8
distribution: zulu
- name: Create cache content
if: ${{ steps.cache.outputs.cache-hit != 'true' }}
env:
GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true -Dorg.gradle.workers.max=4 -Dorg.gradle.warning.mode=all -Dsun.net.client.defaultConnectTimeout=15000 -Dsun.net.client.defaultReadTimeout=600000 -Dsun.io.useCanonCaches=false -Djava.awt.headless=true -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false
run: |
sed -i 's/-all\.zip/-bin.zip/' gradle/wrapper/gradle-wrapper.properties
./gradlew help
build:
if: ${{ needs.retrieve-gradle-versions.outputs.gradle-versions != '[""]' }}
needs:
- retrieve-gradle-versions
- populate-cache
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: true
max-parallel: 1
matrix:
gradle-version: ${{ fromJSON(needs.retrieve-gradle-versions.outputs.gradle-versions) }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Cache
id: cache
uses: actions/cache@v4
with:
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/**', '**/*.gradle') }}
path: |
~/.gradle
- name: Setup Java 8
uses: actions/setup-java@v4
with:
java-version: 8
distribution: zulu
- name: Build
run: |
echo "Build for Gradle ${{ matrix.gradle-version }}"
sed -i 's/-all\.zip/-bin.zip/' gradle/wrapper/gradle-wrapper.properties
./gradlew publishToMavenLocal "-Pgradle-version=${{ matrix.gradle-version }}"
- name: Retrieve Maven artifact versions - Local Groovy
id: retrieve-maven-artifact-versions-local-groovy
uses: remal-github-actions/retrieve-maven-artifact-versions@v1
with:
group: name.remal.gradle-api
name: local-groovy
repository: https://maven.pkg.github.com/remal-gradle-api/packages
user: ${{ github.actor }}
password: ${{ github.token }}
- name: Publish - Local Groovy
if: ${{ github.event_name != 'pull_request' && !contains(fromJSON(steps.retrieve-maven-artifact-versions-local-groovy.outputs.unstable), matrix.gradle-version) }}
env:
PUBLISH_USER: ${{ github.actor }}
PUBLISH_PASSWORD: ${{ secrets.WRITE_PACKAGES_TOKEN }}
run: |
echo "Publish for Gradle ${{ matrix.gradle-version }} - Local Groovy"
./gradlew publishLocalGroovyPublicationToGitHubRepository "-Pgradle-version=${{ matrix.gradle-version }}"
- name: Retrieve Maven artifact versions - Gradle API
id: retrieve-maven-artifact-versions-gradle-api
uses: remal-github-actions/retrieve-maven-artifact-versions@v1
with:
group: name.remal.gradle-api
name: gradle-api
repository: https://maven.pkg.github.com/remal-gradle-api/packages
user: ${{ github.actor }}
password: ${{ github.token }}
- name: Publish - Gradle API
if: ${{ github.event_name != 'pull_request' && !contains(fromJSON(steps.retrieve-maven-artifact-versions-gradle-api.outputs.unstable), matrix.gradle-version) }}
env:
PUBLISH_USER: ${{ github.actor }}
PUBLISH_PASSWORD: ${{ secrets.WRITE_PACKAGES_TOKEN }}
run: |
echo "Publish for Gradle ${{ matrix.gradle-version }} - Gradle API"
./gradlew publishGradleApiPublicationToGitHubRepository "-Pgradle-version=${{ matrix.gradle-version }}"
- name: Retrieve Maven artifact versions - Gradle Test Kit
id: retrieve-maven-artifact-versions-gradle-test-kit
uses: remal-github-actions/retrieve-maven-artifact-versions@v1
with:
group: name.remal.gradle-api
name: gradle-test-kit
repository: https://maven.pkg.github.com/remal-gradle-api/packages
user: ${{ github.actor }}
password: ${{ github.token }}
- name: Publish - Gradle Test Kit
if: ${{ github.event_name != 'pull_request' && !contains(fromJSON(steps.retrieve-maven-artifact-versions-gradle-test-kit.outputs.unstable), matrix.gradle-version) }}
env:
PUBLISH_USER: ${{ github.actor }}
PUBLISH_PASSWORD: ${{ secrets.WRITE_PACKAGES_TOKEN }}
run: |
echo "Publish for Gradle ${{ matrix.gradle-version }} - Gradle Test Kit"
./gradlew publishGradleTestKitPublicationToGitHubRepository "-Pgradle-version=${{ matrix.gradle-version }}"