chore(deps): update dependency mise to v2024.11.14 #48
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Ubuntu WSL Docker image | |
on: | |
schedule: | |
# update once a week | |
- cron: "0 0 * * SUN" | |
push: | |
branches: | |
- main | |
paths: | |
- .github/workflows/wsl-docker.yml | |
pull_request: | |
branches: | |
- main | |
paths: | |
- .github/workflows/wsl-docker.yml | |
workflow_dispatch: | |
permissions: {} | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
build-wsl: | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 10 | |
permissions: | |
packages: write # for GitHub Package Registry | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: ${{ github.repository }}/wsl | |
steps: | |
- name: Install mise | |
uses: jdx/mise-action@53d027c2e96fed8f955f5d95bff910a3e031cc58 # v2.1.6 | |
with: | |
version: 2024.11.12 | |
# cspell:ignore kellyjonbrazil | |
mise_toml: | | |
[tools] | |
"ubi:kellyjonbrazil/jc" = "latest" | |
- name: Get latest Ubuntu version | |
id: version | |
run: | | |
today=$(date --utc --iso-8601) | |
read -r version series < <( | |
curl --fail-with-body --location https://debian.pages.debian.net/distro-info-data/ubuntu.csv \ | |
| jc --csv \ | |
| jq --arg today "${today}" -r ' | |
[ .[] | |
| select(.version | contains("LTS")) | |
| select(.release <= $today) | |
| {series, version: (.version | sub(" LTS"; ""))} | |
] | |
| sort_by(.release) | |
| reverse | |
| .[0] | |
| "\(.version) \(.series)" | |
' | |
) | |
echo "version=${version}" >> "${GITHUB_OUTPUT}" | |
echo "series=${series}" >> "${GITHUB_OUTPUT}" | |
- name: Get Ubuntu WSL build info | |
id: build-info | |
run: | | |
serial=$(curl --fail-with-body --location https://cloud-images.ubuntu.com/wsl/${{ steps.version.outputs.series }}/current/unpacked/build-info.txt \ | |
| grep --only-matching --perl-regexp 'SERIAL=\K\d+') | |
if [[ -z "${serial}" ]]; then | |
echo "Failed to get the serial" >&2 | |
exit 1 | |
fi | |
# + cannot be used in the tag, so use - instead | |
echo "tag=${{ steps.version.outputs.version }}-${serial}" >> "${GITHUB_OUTPUT}" | |
- name: Get latest Ubuntu WSL image tag | |
id: latest-tag | |
# %2F is the URL-encoded form of / | |
# get the tag of the latest image | |
# cspell:ignore fwsl | |
run: | | |
latest_tag=$(gh api --header "Accept: application/vnd.github+json" --header "X-GitHub-Api-Version: 2022-11-28" \ | |
/user/packages/container/${{ github.event.repository.name }}%2Fwsl/versions \ | |
--jq '.[] | select(.metadata.container.tags | contains(["latest"])) | .metadata.container.tags[] | select(. != "latest")') | |
echo "latest_tag=${latest_tag}" >> "${GITHUB_OUTPUT}" | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
# 404 error for the first run | |
continue-on-error: true | |
# cspell:ignore rootfs | |
- name: Download Ubuntu WSL rootfs | |
id: rootfs | |
# skip if the latest image is already created | |
if: ${{ github.event_name == 'pull_request' || steps.build-info.outputs.tag != steps.latest-tag.outputs.latest_tag }} | |
run: | | |
curl --fail-with-body --location --output ubuntu.tar.gz \ | |
https://cloud-images.ubuntu.com/wsl/${{ steps.version.outputs.series }}/current/ubuntu-${{ steps.version.outputs.series }}-wsl-amd64-ubuntu.rootfs.tar.gz | |
- name: Create Dockerfile | |
if: ${{ steps.rootfs.outcome != 'skipped' }} | |
run: | | |
cat <<EOF > Dockerfile | |
FROM scratch | |
ADD ubuntu.tar.gz / | |
EOF | |
- name: Login to GitHub Container Registry | |
if: ${{ steps.rootfs.outcome != 'skipped' }} | |
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ github.token }} | |
# cspell:ignore buildx | |
- name: Setup Buildx | |
if: ${{ steps.rootfs.outcome != 'skipped' }} | |
uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 | |
- name: Build and push Docker image | |
id: push | |
if: ${{ steps.rootfs.outcome != 'skipped' }} | |
uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 | |
with: | |
context: . | |
push: ${{ github.event_name != 'pull_request' }} | |
# avoid image without manifest created | |
# ref: https://github.com/docker/build-push-action/issues/900 | |
provenance: false | |
tags: | | |
ghcr.io/${{ env.IMAGE_NAME }}:${{ steps.build-info.outputs.tag }} | |
ghcr.io/${{ env.IMAGE_NAME }}:latest | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
actions-timeline: | |
needs: | |
- build-wsl | |
if: ${{ !cancelled() }} | |
runs-on: ubuntu-24.04 | |
timeout-minutes: 5 | |
permissions: | |
actions: read # for actions-timeline | |
steps: | |
- name: actions-timeline | |
# cspell:ignore kesin | |
uses: Kesin11/actions-timeline@3046833d9aacfd7745c5264b7f3af851c3e2a619 # v2.2.1 |