mirror of
https://github.com/jdx/mise-action.git
synced 2026-05-15 22:30:31 +00:00
Add outputs for active tool versions to eliminate the need for wrapper steps to extract version information for cache keys. New outputs: - Individual tool outputs (e.g., steps.mise.outputs.bun = "1.0.0") - versions: JSON object with all active tools and full metadata Closes #448
209 lines
6.3 KiB
YAML
209 lines
6.3 KiB
YAML
name: "build-test"
|
|
on: # rebuild any PRs and main branch changes
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
push:
|
|
branches:
|
|
- main
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref_name }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build: # make sure build/ci work properly
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
- run: |
|
|
npm install
|
|
- run: |
|
|
npm run all
|
|
test: # make sure the action works on a clean machine without building
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: ubuntu
|
|
runs-on: ubuntu-latest
|
|
- name: macos
|
|
runs-on: macos-latest
|
|
- name: windows
|
|
runs-on: windows-latest
|
|
- name: alpine
|
|
runs-on: ubuntu-latest
|
|
container: alpine:latest
|
|
requirements: apk add --no-cache curl bash
|
|
name: ${{ matrix.name }}
|
|
runs-on: ${{ matrix.runs-on }}
|
|
container: ${{ matrix.container }}
|
|
steps:
|
|
- name: Install requirements
|
|
if: ${{ matrix.requirements }}
|
|
run: ${{ matrix.requirements }}
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
- name: Setup mise
|
|
uses: ./
|
|
with:
|
|
mise_toml: |
|
|
[tools]
|
|
jq = "1.7.1"
|
|
|
|
[env]
|
|
MY_ENV_VAR = "abc"
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- run: mise --version
|
|
- run: mise x jq -- jq --version
|
|
- run: which jq
|
|
- run: jq --version
|
|
- run: . scripts/test.sh
|
|
shell: bash
|
|
|
|
specific_version:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
- name: Setup mise
|
|
uses: ./
|
|
with:
|
|
cache_save: ${{ github.ref_name == 'main' }}
|
|
cache_key_prefix: mise-v1
|
|
version: 2025.7.3
|
|
sha256: d38d4993c5379a680b50661f86287731dc1d1264777880a79b786403af337948
|
|
install_args: bun
|
|
mise_toml: |
|
|
[tools]
|
|
bun = "1"
|
|
- run: which bun
|
|
- run: bun -v
|
|
- name: Update mise
|
|
uses: ./
|
|
with:
|
|
cache_save: ${{ github.ref_name == 'main' }}
|
|
cache_key_prefix: mise-v1
|
|
version: v2025.7.3 # should trim the `v`
|
|
sha256: d38d4993c5379a680b50661f86287731dc1d1264777880a79b786403af337948
|
|
|
|
checksum_failure:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
- name: Setup mise
|
|
id: bad
|
|
uses: ./
|
|
with:
|
|
version: 2024.9.6
|
|
sha256: 1f0b8c3d2e4f5a6b7c8d9e0f1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t
|
|
continue-on-error: true
|
|
- name: Dump steps context
|
|
if: ${{ always() }}
|
|
env:
|
|
STEPS_CONTEXT: ${{ toJson(steps) }}
|
|
run: echo "$STEPS_CONTEXT"
|
|
- name: expect failure
|
|
run: echo "Failed as expected"
|
|
if: ${{ steps.bad.outcome == 'failure' }}
|
|
- name: not failed as expected
|
|
run: |
|
|
echo "Expected failure but the job was ${{ steps.bad.outcome }}"
|
|
exit 1
|
|
if: ${{ steps.bad.outcome != 'failure' }}
|
|
|
|
custom_cache_key:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
- name: Setup mise with custom cache key
|
|
uses: ./
|
|
with:
|
|
cache_key: "custom-{{platform}}-{{install_args_hash}}-${{ github.run_id }}"
|
|
install_args: "jq@1.7.1"
|
|
mise_toml: |
|
|
[tools]
|
|
jq = "1.7.1"
|
|
- run: mise --version
|
|
- run: mise x jq -- jq --version
|
|
- run: which jq
|
|
- run: jq --version
|
|
|
|
fetch_from_github:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
- name: Setup mise from mise.jdx.dev
|
|
uses: ./
|
|
with:
|
|
fetch_from_github: true
|
|
cache: false
|
|
cache_save: false
|
|
mise_toml: |
|
|
[tools]
|
|
jq = "1.7.1"
|
|
- run: mise --version
|
|
- run: mise x jq -- jq --version
|
|
- run: which jq
|
|
- run: jq --version
|
|
|
|
version_outputs:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
- name: Setup mise
|
|
id: mise
|
|
uses: ./
|
|
with:
|
|
cache: false
|
|
mise_toml: |
|
|
[tools]
|
|
jq = "1.7.1"
|
|
bun = "1.2.0"
|
|
- name: Verify individual tool outputs
|
|
run: |
|
|
echo "jq version: ${{ steps.mise.outputs.jq }}"
|
|
echo "bun version: ${{ steps.mise.outputs.bun }}"
|
|
if [ -z "${{ steps.mise.outputs.jq }}" ]; then
|
|
echo "ERROR: jq output is empty"
|
|
exit 1
|
|
fi
|
|
if [ -z "${{ steps.mise.outputs.bun }}" ]; then
|
|
echo "ERROR: bun output is empty"
|
|
exit 1
|
|
fi
|
|
echo "Individual tool outputs verified successfully"
|
|
- name: Verify versions JSON output
|
|
run: |
|
|
echo "versions JSON: ${{ steps.mise.outputs.versions }}"
|
|
# Parse and validate JSON structure
|
|
echo '${{ steps.mise.outputs.versions }}' | jq -e '.jq.version' > /dev/null
|
|
echo '${{ steps.mise.outputs.versions }}' | jq -e '.bun.version' > /dev/null
|
|
echo "versions JSON output verified successfully"
|
|
- name: Use version output in cache key (simulation)
|
|
run: |
|
|
# Simulate using the version output in a cache key
|
|
CACHE_KEY="bun-cache-linux-${{ steps.mise.outputs.bun }}"
|
|
echo "Generated cache key: $CACHE_KEY"
|
|
if [[ "$CACHE_KEY" != *"1.2.0"* ]]; then
|
|
echo "ERROR: Cache key does not contain expected version"
|
|
exit 1
|
|
fi
|
|
echo "Cache key simulation successful"
|
|
|
|
final:
|
|
needs:
|
|
- build
|
|
- test
|
|
- specific_version
|
|
- checksum_failure
|
|
- custom_cache_key
|
|
- fetch_from_github
|
|
- version_outputs
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 1
|
|
if: always()
|
|
steps:
|
|
- name: Check CI job results
|
|
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'skipped')
|
|
run: exit 1
|