On utilise généralement ASDF et le fichier .tool-versions
comme source de vérité des versions de languages dans nos projets. Afin d'éviter cette solution (run: echo ::set-output name=TF_VERSION::$(grep -Eo 'terraform [0-9\.]*' .tool-versions | awk '{print $NF}')
) copiée dans différents projets, j'étais sur le point d'aller faire une action ré-utilisable qui parse ce fichier pour exposer les versions aux autres étapes.
J'ai ensuite réalisé que dernièrement, le support de ce fichier avait été ajouté dans les actions d'elixir et de nodejs. Voici donc une façon d'installer les languages qu'on utilise couramment dans nos projets et d'éviter d'avoir à le synchroniser à chaque mise-à-jour.
- uses: erlef/setup-beam@v1
id: setup-beam
with:
version-file: .tool-versions
version-type: strict
- uses: actions/cache@v3
with:
path: |
deps
_build
priv/plts
key: ${{ runner.os }}-mix-${{ steps.setup-beam.outputs.otp-version }}-${{ steps.setup-beam.outputs.elixir-version }}-${{ hashFiles(format('{0}/mix.lock', github.workspace)) }}
Le support de la cache n'est pas intégré pour le moment, mais ça se discute, à suivre...
- uses: actions/setup-node@v3
with:
node-version-file: .tool-versions
cache: [npm | yarn]
- uses: ruby/setup-ruby@v1
with:
ruby-version: '.tool-versions'
bundler-cache: true
Pour l'instant, ce n'est pas supporté, mais le projet est récemment revenu à la vie et des issues comment ceci sont populaires. Qui sait, je ferai peut-être mes changements là à la place!
- name: Get Terraform version
id: get_tf_version
run: echo TF_VERSION=$(grep -Eo 'terraform [0-9\.]*' .tool-versions | awk '{print $NF}') >> $GITHUB_OUTPUT
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: ${{ steps.get_tf_version.outputs.tf_version }}