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
gh
is not install withbrew
sobrew update gh
won’t work brew update
needs to be run for the runner to have the info about the new version- Specific
brew
binarygh
needs 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
gh
CLI directly -
Specifying
-R
option to target CLI repo -
Specificying
--pattern
to target which release asset to download. Example forubuntu-latest
gh release download -R cli/cli --pattern '*linux_amd64.deb'
The
pattern
needs 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 ↩︎