From 4678b57fab685463d1a6487b6661383bab0a7e7a Mon Sep 17 00:00:00 2001 From: "Paulo F. Oliveira" Date: Fri, 12 Jan 2024 19:46:16 +0000 Subject: [PATCH] Have the action output a versioning element so it could be used as part of the cache restore key (#239) * Do a bit of YAMLlint'ing * Ease consumer cache invalidation By providing an output with the action version we ease cache invalidation on consumer, due to the fact we can now stop worrying about changes to the action's cache itself Might also be interesting for self-hosted runners... * Remove duplicates * Do further validations for robustness --- .github/workflows/action.yml | 25 +++++++++++++++++++++++++ .github/workflows/ubuntu.yml | 24 ++++-------------------- README.md | 15 +++++++++++++++ action.yml | 2 ++ dist/index.js | 4 ++++ src/setup-beam.js | 4 ++++ 6 files changed, 54 insertions(+), 20 deletions(-) diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index d428e8e..2b173d1 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -7,6 +7,31 @@ env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} jobs: + version: + name: Version with commit unique id + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' + steps: + - uses: actions/checkout@v3 + - name: Version it! + run: | + # We expect a string such as const setupBeamVersion = 'undefined' in the code + SHA=$(git rev-parse --short HEAD) + sed -i'.bak' \ + -e "s/const setupBeamVersion = '.*'/const setupBeamVersion = '${SHA}'/g" \ + dist/index.js + # it always starts by being 'undefined' + NEWVER=$(grep -oE "const setupBeamVersion = '.*'" dist/index.js | cut -d\' -f2) + if [ "$NEWVER" == "undefined" ]; then + exit 1 + else + echo "Continuing... new version is ${NEWVER}" + fi + git config user.name "GitHub Actions" + git config user.email "actions@user.noreply.github.com" + git add dist/index.js + git commit -m "Update setup-beam version output to ${SHA}" + git push origin main check_integrity: name: Expected local npm actions runs-on: ubuntu-latest diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index d29cc45..f2ac8ab 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -24,7 +24,7 @@ jobs: os: 'ubuntu-latest' version-type: 'strict' - otp-version: '25.2' - elixir-version: '1.14.3' + elixir-version: '1.14.2' os: 'ubuntu-latest' - otp-version: '25.2' elixir-version: '1.14.3' @@ -66,14 +66,6 @@ jobs: otp-version: '21' rebar3-version: '3.12' os: 'ubuntu-20.04' - - elixir-version: 'v1.6' - otp-version: '21' - rebar3-version: '3.12' - os: 'ubuntu-20.04' - - elixir-version: 'v1.7' - otp-version: '22' - rebar3-version: '3.13' - os: 'ubuntu-20.04' - elixir-version: 'v1.7' otp-version: '22' rebar3-version: '3.13' @@ -86,18 +78,10 @@ jobs: otp-version: '25.0.2' rebar3-version: '3.19' os: 'ubuntu-20.04' - - elixir-version: 'v1.10' - otp-version: '23' - rebar3-version: '3.14' - os: 'ubuntu-20.04' - elixir-version: 'v1.12' otp-version: '24' rebar3-version: '3.15' os: 'ubuntu-20.04' - - elixir-version: 'v1.13.4' - otp-version: '25.0.2' - rebar3-version: '3.19' - os: 'ubuntu-20.04' - elixir-version: 'v1.11.0' otp-version: '22.3.4.2' os: 'ubuntu-20.04' @@ -108,11 +92,11 @@ jobs: version-type: 'strict' - elixir-version: 'main' otp-version: '23.1' - os: 'ubuntu-20.04' + os: 'ubuntu-20.04' version-type: 'strict' - elixir-version: 'main' otp-version: '25' - os: 'ubuntu-20.04' + os: 'ubuntu-20.04' version-type: 'strict' - gleam-version: '0.23' otp-version: '24' @@ -126,7 +110,7 @@ jobs: otp-version: false os: 'ubuntu-latest' disable_problem_matchers: true - - gleam-version: '0.22.0' # Version with Gleam's old archive naming convention + - gleam-version: '0.22.0' # Version with Gleam's old archive naming convention otp-version: '24' os: 'ubuntu-latest' disable_problem_matchers: true diff --git a/README.md b/README.md index 983679f..c63d72e 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,21 @@ jobs: ... ``` +### Outputs + +The action provides the following outputs: + +| Output | Content +|- |- +| otp-version | The Erlang version, e.g. `OTP-26.0` +| elixir-version | The Elixir version, e.g. `v1.14-otp-26` +| gleam-version | The Gleam version, e.g. `v0.23.0` +| rebar3-version | The `rebar3` version, e.g. `3.18.0` +| setup-beam-version | The commit unique id of the executed action version, e.g. `a34c98f` + +accessible as `${{steps..outputs.}}`, +e.g. `${{steps.setup-beam.outputs.erlang-version}}` + ### Version file A version file is specified via input `version-file` (e.g.`.tool-versions`). This diff --git a/action.yml b/action.yml index d44d7ad..173f4c6 100644 --- a/action.yml +++ b/action.yml @@ -58,6 +58,8 @@ outputs: description: Exact version of Gleam that was installed rebar3-version: description: Exact version of rebar3 that was installed + setup-beam-version: + description: The commit unique id of the execution action version runs: using: node16 main: dist/index.js diff --git a/dist/index.js b/dist/index.js index 8a2f193..fbcb665 100644 --- a/dist/index.js +++ b/dist/index.js @@ -9868,6 +9868,10 @@ async function main() { await maybeInstallGleam(gleamSpec) await maybeInstallRebar3(rebar3Spec) + + // undefined is replaced by a function, post- main branch merge + const setupBeamVersion = 'undefined' + core.setOutput('setup-beam-version', setupBeamVersion) } async function installOTP(otpSpec, osVersion) { diff --git a/src/setup-beam.js b/src/setup-beam.js index 2ffa14e..6d992f0 100644 --- a/src/setup-beam.js +++ b/src/setup-beam.js @@ -47,6 +47,10 @@ async function main() { await maybeInstallGleam(gleamSpec) await maybeInstallRebar3(rebar3Spec) + + // undefined is replaced by a function, post- main branch merge + const setupBeamVersion = 'undefined' + core.setOutput('setup-beam-version', setupBeamVersion) } async function installOTP(otpSpec, osVersion) {