Some context about the problem
Recently, I have been working on migrating our workflows for TinyTeX bundles released on tinytex-releases from Appveyor to Github Action1.
For adapting the workflow, I needed to easily create and update release from the workflow itself. Github CLI tool (https://cli.github.com/) comes in handy for such tasks, like managing Github Releases using gh release or making request with Github API using gh api . Github CLI is part of the pre-installed tools one can found in github-hosted runners.2 So it means you don’t have to install it in a workflow step.
While I was in the process of updating the workflows, it happens that a new release of the CLI went out and I was really waiting for it: gh version 2.8 adds a new gh release edit command that, among other things, allows to undraft an existing draft. That was the missing piece I needed to avoid some weird API calls as workaround.
However, I found out that github-hosted runners does not get updated right away with latest version- gh version 2.7 was still the one available by default.
That’s too bad - I really want to use the last version and don’t want to wait!
Updating a pre-installed software
So in order to use the last new release, I needed to find a way to update the existing one. Here are two solutions with examples for unbuntu-latest runners
Install a newer version using brew
brew package manager has been already updated so brew install gh could be used. The important pieces are:
- Default
ghis not install withbrewsobrew update ghwon’t work brew updateneeds to be run for the runner to have the info about the new version- Specific
brewbinaryghneeds to be used, located in$(brew --prefix gh)/bin/gh
Example in workflow file
steps:
# this uses version 2.7
- run: gh --version
# installing new version 2.8
- name: update
run: |
brew update
brew install gh
# still point to version 2.7
- run: which gh
# this using version 2.8
- run: $(brew --prefix gh)/bin/gh --version
Updating the included version using a .deb file
Github CLI is released on https://github.com/cli/cli as a Github release. This means it is really easy to download a release bundle:
-
Using available
ghCLI directly -
Specifying
-Roption to target CLI repo -
Specificying
--patternto target which release asset to download. Example forubuntu-latestgh release download -R cli/cli --pattern '*linux_amd64.deb'The
patternneeds to be adjusted according to the OS.
Then it can be installed on the system, which will replace the pre-installed version
sudo dpkg -i 'gh_2.8.0_linux_amd64.deb'
Here is a complete example in a workflow file
steps:
# this is 2.7 version
- run: gh --version
# Updating and downloading the release
- name: update
env:
# Needed for gh CLI to work
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release download -R cli/cli --pattern '*linux_amd64.deb'
sudo dpkg -i $(ls *.deb)
# same binary as 2.7
- run: which gh
# now updated to 2.8
- run: gh --version
Conclusion
I ended using the second solution adding the update step in my workflow. Obviously, this can be removed when gh 2.8 will be available on the runners.
This post will be useful for future me maybe so that I don’t search again for this. But maybe it can be useful to someone else… that is why it is best to go public with notes, right ?
-
And more exactly these PR yihui/tinytex#362, yihui/tinytex#369 and yihui/tinytex-releases#22. ↩︎
-
You can find about supported sofware in github-hosted runners in the doc for each OS at https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software ↩︎