Skip to content

Commit

Permalink
Build library with Java version specified in .tool-versions
Browse files Browse the repository at this point in the history
Log Java version used
  • Loading branch information
rtyley committed Apr 30, 2024
1 parent 8648ce9 commit 75e43c2
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
30 changes: 26 additions & 4 deletions .github/workflows/reusable-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,31 @@ jobs:
name: 🎊 Test & Version
needs: init
runs-on: ubuntu-latest
outputs:
library_build_major_java_version: ${{ steps.establish_java_for_library_build.outputs.library_build_major_java_version }}
steps:
- uses: actions/checkout@v4
- id: establish_java_for_library_build
name: Establish library build Java version
run: |
if [ ! -f .tool-versions ]; then
echo "::error title=Missing .tool-versions file::gha-scala-library-release-workflow requires an asdf-format .tool-versions file to establish the Java version for the build."
exit 1
fi
LIBRARY_BUILD_MAJOR_JAVA_VERSION=$( grep -Eo 'java [[:alpha:]-]+-[[:digit:]]+' .tool-versions | rev | cut -d'-' -f1 | rev )
echo "Using Java $LIBRARY_BUILD_MAJOR_JAVA_VERSION"
if [ -z "${LIBRARY_BUILD_MAJOR_JAVA_VERSION}" ]; then
echo "::error title=Missing Java version in .tool-versions file::Could not establish the library's required Java version - the '.tool-versions' file should have a line like 'java corretto-21.0.3.9.1'."
exit 1
fi
cat << EndOfFile >> $GITHUB_OUTPUT
library_build_major_java_version=$LIBRARY_BUILD_MAJOR_JAVA_VERSION
EndOfFile
- uses: actions/setup-java@v4 # don't 'cache: sbt', at least until https://github.com/actions/setup-java/pull/564 is merged
with:
distribution: corretto
java-version: 17
java-version: ${{ steps.establish_java_for_library_build.outputs.library_build_major_java_version }}
# - name: Debug MIMA assessment
# run: |
# sbt "show versionPolicyFindIssues"
Expand All @@ -140,7 +159,10 @@ jobs:
ls -lR $GITHUB_WORKSPACE
- name: Job summary
run: |
echo "# Release $(git describe --tags --abbrev=0)" >> $GITHUB_STEP_SUMMARY
cat << EndOfFile >> $GITHUB_STEP_SUMMARY
# Release $(git describe --tags --abbrev=0)
Library built with Java ${{ steps.establish_java_for_library_build.outputs.library_build_major_java_version }}.
EndOfFile
- uses: actions/cache/save@v4
with:
path: repo-with-unsigned-version-update-commits.git
Expand Down Expand Up @@ -239,7 +261,7 @@ jobs:
create-artifacts:
name: 🎊 Create artifacts
needs: [init, push-release-commit]
needs: [init, generate-version-update-commits, push-release-commit]
runs-on: ubuntu-latest
outputs:
ARTIFACT_SHA256SUMS: ${{ steps.record-hashes.outputs.ARTIFACT_SHA256SUMS }}
Expand All @@ -250,7 +272,7 @@ jobs:
- uses: actions/setup-java@v4 # don't 'cache: sbt', at least until https://github.com/actions/setup-java/pull/564 is resolved
with:
distribution: corretto
java-version: 17
java-version: ${{ needs.generate-version-update-commits.outputs.library_build_major_java_version }}
- name: Generate artifacts
run: |
cat << EndOfFile > sbt-commands.txt
Expand Down
24 changes: 24 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,30 @@ Your repo will require access to [release credentials](credentials/supplying-cre
[pass on those secrets](https://github.com/guardian/etag-caching/blob/9935da29e76b8b89759bcfe967cc7c1c02aa1814/.github/workflows/release.yml#L11-L13)
to the workflow.

## Java version

[Example `.tool-versions`](https://github.com/guardian/etag-caching/blob/main/.tool-versions)

Your repository *must* contain an [`asdf`](https://asdf-vm.com/)-formatted `.tool-versions` file
in the root of the repository, specifying the Java version to be used by the workflow for
building your project, eg:

```
java corretto-21.0.3.9.1
```

Note that although `asdf` requires a fully-specified Java version (eg `21.0.3.9.1` - use
`asdf list-all java` to list all possible Java versions), currently the workflow will only
match the *major* version of Java specified in the file (eg `21`), and will _always_ use the
AWS Corretto distribution of Java. This is due to
[limitations](https://github.com/actions/setup-java/issues/615) in
[`actions/setup-java`](https://github.com/actions/setup-java).

As recommended [below](#recommended-sbt-settings), you should also specify a `-release` flag in
`scalacOptions` to ensure that your library is compiled for any older versions of Java you wish
to support, even if you're taking advantage of a more recent version of Java for _building_ the
library.

## `sbt`

### Recommended `sbt` plugins
Expand Down

0 comments on commit 75e43c2

Please sign in to comment.