diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d812d9c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,77 @@ +name: release +on: + push: + tags: + - "**" +jobs: + publish: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + # Fetch all history + fetch-depth: 0 + - name: Setup Java 21 + uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '21' + - name: Maven Publish + id: maven_publish + env: + ARCHIVE_URL: ${{ secrets.TEACON_ARCHIVE_URL }} + ARCHIVE_ENDPOINT: ${{ secrets.TEACON_ARCHIVE_ENDPOINT }} + ARCHIVE_ACCESS_KEY: ${{ secrets.TEACON_ARCHIVE_ACCESS_KEY }} + ARCHIVE_SECRET_KEY: ${{ secrets.TEACON_ARCHIVE_SECRET_KEY }} + run: ./gradlew -Dorg.gradle.s3.endpoint=$ARCHIVE_ENDPOINT publishReleasePublicationToTeaconRepository githubActionOutput + - name: Generate Changelog + id: changelog + shell: bash + env: + CURRENT: ${{ github.ref }} + ARTIFACT_GIT_TAG: ${{ steps.maven_publish.outputs.artifact_git_tag }} + # Special thanks to this post on Stack Overflow regarding change set between two tags: + # https://stackoverflow.com/questions/12082981 + # Do note that actions/checkout will enter detach mode by default, so you won't have + # access to HEAD ref. Use GitHub-Action-supplied `github.ref` instead. + # Special thanks to this issue ticket regarding escaping newline: + # https://github.com/actions/create-release/issues/25 + # We use Bash parameter expansion to do find-and-replace. + # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html + # Also we cannot use git rev-list because it always prepend "commit " + # See https://stackoverflow.com/questions/36927089/ + run: | + current_tag=${CURRENT/refs\/tags\//} + test "$current_tag" = "$ARTIFACT_GIT_TAG" + last_tag=`git describe --tags --abbrev=0 "$current_tag"^ 2>/dev/null || echo` + if [ last_tag ]; then + changelog=`git log --pretty="format:%H: %s" ${last_tag}..$current_tag` + else + changelog=`git log --pretty="format:%H: %s"` + fi + changelog="${changelog//'%'/'%25'}" + changelog="${changelog//$'\n'/' %0A'}" + echo "::set-output name=value::Change set since ${last_tag:-the beginning}: %0A%0A$changelog" | tee "$GITHUB_OUTPUT" + - name: GitHub Release + id: create_release + uses: actions/create-release@v1.1.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: false + prerelease: false + body: | + ${{ steps.changelog.outputs.value }} + - name: GitHub Release Artifact + 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: ${{ steps.maven_publish.outputs.artifact_path }} + asset_name: ${{ steps.maven_publish.outputs.artifact_publish_name }} + # https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types + asset_content_type: "application/java-archive" diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml new file mode 100644 index 0000000..9afb96e --- /dev/null +++ b/.github/workflows/test-build.yml @@ -0,0 +1,30 @@ +name: test-build +on: + push: + paths: + - 'src/**' + - 'build.gradle' +jobs: + build: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Java 21 + uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '21' + - name: Get Short Identifier + uses: benjlevesque/short-sha@v2.2 + id: short-sha + - name: Build + id: build + env: + VERSION_IDENTIFIER: SNAPSHOT+${{ steps.short-sha.outputs.sha }} + run: ./gradlew build githubActionOutput --stacktrace + - name: GitHub Action Artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ steps.build.outputs.artifact_name }} + path: ${{ steps.build.outputs.artifact_path }}