A repository of bitesize articles, tips & tricks
(in both English and French) curated by Mirego’s team.

GitHub Actions & ASDF

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.

Elixir & Erlang

- 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...

NodeJS

- uses: actions/setup-node@v3
  with:
    node-version-file: .tool-versions
    cache: [npm | yarn]

Ruby

- uses: ruby/setup-ruby@v1
  with:
    ruby-version: '.tool-versions'
    bundler-cache: true

Terraform

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 }}