243 lines
8.6 KiB
YAML
243 lines
8.6 KiB
YAML
# Releases a new major / minor / patch version from a release branch
|
|
name: Release Build
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
test-java-version:
|
|
- 8
|
|
- 11
|
|
- 15
|
|
steps:
|
|
- uses: actions/checkout@v2.3.4
|
|
with:
|
|
ref: ${{ github.ref_name }}
|
|
|
|
- id: setup-test-java
|
|
name: Set up JDK ${{ matrix.test-java-version }} for running tests
|
|
uses: actions/setup-java@v2
|
|
with:
|
|
distribution: adopt
|
|
java-version: ${{ matrix.test-java-version }}
|
|
|
|
- name: Set up JDK 11 for running Gradle
|
|
uses: actions/setup-java@v2
|
|
with:
|
|
distribution: adopt
|
|
java-version: 11
|
|
|
|
- name: Test
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
arguments: test -PtestJavaVersion=${{ matrix.test-java-version }} -Porg.gradle.java.installations.paths=${{ steps.setup-test-java.outputs.path }} -Porg.gradle.java.installations.auto-download=false
|
|
|
|
# testLatestDeps is intentionally not included in the release workflows
|
|
# because any time a new library version is released to maven central
|
|
# it can fail due to test code incompatibility with the new library version,
|
|
# or due to slight changes in emitted telemetry
|
|
|
|
smoke-test:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- windows-2019
|
|
- ubuntu-latest
|
|
smoke-test-suite:
|
|
- jetty
|
|
- liberty
|
|
- payara
|
|
- tomcat
|
|
- tomee
|
|
- websphere
|
|
- wildfly
|
|
- other
|
|
exclude:
|
|
- os: windows-2019
|
|
smoke-test-suite: websphere
|
|
steps:
|
|
- name: Support longpaths
|
|
run: git config --system core.longpaths true
|
|
if: matrix.os == 'windows-2019'
|
|
|
|
- uses: actions/checkout@v2.3.4
|
|
with:
|
|
ref: ${{ github.ref_name }}
|
|
|
|
- name: Set up JDK 11 for running Gradle
|
|
uses: actions/setup-java@v2
|
|
with:
|
|
distribution: adopt
|
|
java-version: 11
|
|
|
|
- name: Test
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
arguments: ":smoke-tests:test -PsmokeTestSuite=${{ matrix.smoke-test-suite }}"
|
|
|
|
# muzzle is intentionally not included in the release workflows
|
|
# because any time a new library version is released to maven central it can fail,
|
|
# and this is not a reason to hold up the release
|
|
|
|
examples:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2.3.4
|
|
with:
|
|
ref: ${{ github.ref_name }}
|
|
|
|
- name: Set up JDK 11 for running Gradle
|
|
uses: actions/setup-java@v2
|
|
with:
|
|
distribution: adopt
|
|
java-version: 11
|
|
|
|
- name: Local publish of artifacts
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
# javadoc task fails sporadically fetching https://docs.oracle.com/javase/8/docs/api/
|
|
arguments: publishToMavenLocal -x javadoc
|
|
|
|
- name: Local publish of gradle plugins
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
# javadoc task fails sporadically fetching https://docs.oracle.com/javase/8/docs/api/
|
|
arguments: publishToMavenLocal -x javadoc
|
|
build-root-directory: gradle-plugins
|
|
|
|
- name: Build distro
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
arguments: build --init-script ../../.github/scripts/local.init.gradle.kts
|
|
build-root-directory: examples/distro
|
|
|
|
- name: Build extension
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
arguments: build --init-script ../../.github/scripts/local.init.gradle.kts
|
|
build-root-directory: examples/extension
|
|
|
|
- name: Run muzzle check against extension
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
arguments: muzzle --init-script ../../.github/scripts/local.init.gradle.kts
|
|
build-root-directory: examples/extension
|
|
cache-read-only: true
|
|
|
|
release:
|
|
needs: [ test, smoke-test, examples ]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2.3.4
|
|
with:
|
|
ref: ${{ github.ref_name }}
|
|
# tags are needed for the generate-release-contributors.sh script
|
|
fetch-depth: 0
|
|
|
|
- name: Set up JDK 11 for running Gradle
|
|
uses: actions/setup-java@v2
|
|
with:
|
|
distribution: adopt
|
|
java-version: 11
|
|
|
|
- name: Build and publish artifacts
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
arguments: assemble publishToSonatype closeAndReleaseSonatypeStagingRepository
|
|
env:
|
|
SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
|
|
SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }}
|
|
GRGIT_USER: ${{ github.actor }}
|
|
GRGIT_PASS: ${{ secrets.GITHUB_TOKEN }}
|
|
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
|
GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
|
|
|
|
- name: Build and publish gradle plugins
|
|
uses: gradle/gradle-build-action@v2
|
|
env:
|
|
SONATYPE_USER: ${{ secrets.SONATYPE_USER }}
|
|
SONATYPE_KEY: ${{ secrets.SONATYPE_KEY }}
|
|
GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
|
|
GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}
|
|
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
|
GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
|
|
with:
|
|
# Don't use publishToSonatype since we don't want to publish the marker artifact
|
|
arguments: build publishPlugins publishPluginMavenPublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository
|
|
build-root-directory: gradle-plugins
|
|
|
|
- name: Set versions
|
|
id: set-versions
|
|
run: |
|
|
v=$(grep -Eo "[0-9]+.[0-9]+.0" version.gradle.kts | head -1)
|
|
if [[ $v =~ ([0-9]+).([0-9]+).0 ]]; then
|
|
major="${BASH_REMATCH[1]}"
|
|
minor="${BASH_REMATCH[2]}"
|
|
else
|
|
echo "unexpected version: $v"
|
|
exit 1
|
|
fi
|
|
if [[ $minor == 0 ]]; then
|
|
prior_major=$((major - 1))
|
|
prior_minor=$(grep -Po "^## Version $prior_major.\K([0-9]+)" CHANGELOG.md | head -1)
|
|
prior="$prior_major.$prior_minor"
|
|
else
|
|
prior="$major.$((minor - 1)).0"
|
|
fi
|
|
echo "::set-output name=release-version::$v"
|
|
echo "::set-output name=prior-version::$prior"
|
|
|
|
- name: Generate Release Notes
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
cat > release-notes.txt << EOF
|
|
Note that all artifacts other than `io.opentelemetry.javaagent:opentelemetry-javaagent` have the `-alpha` suffix attached to their version number, reflecting that they are still alpha quality and will continue to have breaking changes. Please see the [VERSIONING.md](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/VERSIONING.md#opentelemetry-java-instrumentation-versioning) for more details.
|
|
|
|
EOF
|
|
|
|
sed -n '4,/^## Version /p' CHANGELOG.md \
|
|
| head -n -1 \
|
|
| perl -0pe 's/^\n+//g' \
|
|
| perl -0pe 's/\n+$/\n/g' \
|
|
| sed -r 's,\[#([0-9]+)]\(https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/[0-9]+\),#\1,' \
|
|
| perl -0pe 's/\n +/ /g' \
|
|
>> release-notes.txt
|
|
|
|
cat >> release-notes.txt << EOF
|
|
|
|
### 🙇 Thank you
|
|
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:
|
|
|
|
EOF
|
|
|
|
.github/scripts/generate-release-contributors.sh v${{ steps.set-versions.outputs.prior-version }} v${{ steps.set-versions.outputs.release-version }} >> release-notes.txt
|
|
|
|
- name: Create Release
|
|
id: create_release
|
|
uses: actions/create-release@v1.1.4
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: v${{ steps.set-versions.outputs.release-version }}
|
|
commitish: ${{ github.ref_name }}
|
|
release_name: Version ${{ steps.set-versions.outputs.release-version }}
|
|
draft: true
|
|
prerelease: false
|
|
body_path: release-notes.txt
|
|
|
|
- name: Upload Release Asset
|
|
id: upload-release-asset
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
asset_path: javaagent/build/libs/opentelemetry-javaagent-${{ steps.set-versions.outputs.release-version }}.jar
|
|
asset_name: opentelemetry-javaagent.jar
|
|
asset_content_type: application/java-archive
|