|
1 | 1 | name: Prebuild DevX closures
|
2 |
| -on: |
3 |
| - push: |
4 |
| - branches: |
5 |
| - - main |
6 | 2 |
|
7 |
| - workflow_dispatch: |
| 3 | +on: |
| 4 | + workflow_call: |
| 5 | + inputs: |
| 6 | + platform: |
| 7 | + required: true |
| 8 | + type: string |
8 | 9 |
|
9 | 10 | env:
|
10 | 11 | REGISTRY: ghcr.io
|
@@ -36,49 +37,28 @@ jobs:
|
36 | 37 | # Group the output by platform.
|
37 | 38 | RUNS=$(gh api "repos/$GITHUB_REPOSITORY/commits/$GITHUB_SHA/check-runs" --paginate)
|
38 | 39 | echo "checks..."
|
39 |
| - FILTERED=$(jq -c -r '.check_runs[] | select(.name | endswith("-env")) | { "config": .name, "build_path": .output.text }' <<< "$RUNS") |
40 |
| - echo "filtered..." |
41 |
| - MATRIX=$(jq --slurp -c -r '. as $jobs | map(.config | split(".") | first) | unique | map(. as $group | {"platform": $group, "jobs": $jobs | map(select(.config |startswith($group)))})' <<< "$FILTERED") |
42 |
| - echo "groups..." |
43 |
| - if jq -e . <<< "$MATRIX" > /dev/null 2>&1; then # JSON validation |
44 |
| - echo "Valid JSON" |
45 |
| - else |
46 |
| - echo "Invalid JSON: $MATRIX" |
47 |
| - exit 1 # or handle the error appropriately |
48 |
| - fi |
| 40 | + FILTERED=$(jq -c -r '.check_runs[] | select(.name | endswith("-env")) | select(.name | startswith("${{ inputs.platform }}")) | { "config": .name, "build_path": .output.text, "short_name": .name | sub("${{ inputs.platform }}\\.";"") }' <<< "$RUNS") |
| 41 | + jq . <<< "$FILTERED" |
| 42 | + MATRIX=$(jq --slurp -c -r '.' <<< "$FILTERED") |
| 43 | + jq . <<< "$MATRIX" |
49 | 44 | echo "creating result matrix."
|
50 | 45 | echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
|
51 | 46 |
|
52 | 47 | # We need this process step in here, because we have in excess of 256 jobs.
|
53 | 48 | process:
|
54 | 49 | needs: discover
|
55 |
| - runs-on: ubuntu-latest # You still need runs-on to define a job, but it can be minimal |
56 |
| - strategy: |
57 |
| - fail-fast: false |
58 |
| - matrix: |
59 |
| - group: ${{ fromJson(needs.discover.outputs.matrix) }} |
60 |
| - name: Process Jobs for ${{ matrix.group.platform }} |
61 |
| - outputs: |
62 |
| - jobs: ${{ toJson(matrix.group.jobs) }} # Direct output definition |
63 |
| - steps: |
64 |
| - - name: No-op step (required to have at least one step) |
65 |
| - run: echo "No-op" # Minimal step to satisfy step requirement |
66 |
| - |
67 |
| - ghcr-upload: |
68 |
| - needs: process |
69 |
| - name: Container Upload |
| 50 | + runs-on: ubuntu-latest |
70 | 51 | strategy:
|
71 | 52 | fail-fast: false
|
72 | 53 | matrix:
|
73 |
| - job: ${{ fromJson(needs.process.outputs.matrix) }} |
74 |
| - runs-on: ubuntu-latest |
| 54 | + job: ${{ fromJson(needs.discover.outputs.matrix) }} |
| 55 | + name: GHCR Upload for ${{ matrix.job.short_name }} |
75 | 56 | permissions:
|
76 | 57 | contents: read
|
77 | 58 | packages: write
|
78 | 59 | steps:
|
79 | 60 | - name: Free Disk Space (Ubuntu)
|
80 | 61 | uses: jlumbroso/free-disk-space@main
|
81 |
| - |
82 | 62 | - name: Install Nix with good defaults
|
83 | 63 | uses: cachix/install-nix-action@v20
|
84 | 64 | with:
|
|
101 | 81 | NIX_STORE_SECRET_KEY: ${{ secrets.SECRET_KEY }}
|
102 | 82 | run: ./extra/ghcr-upload.sh
|
103 | 83 |
|
| 84 | + |
| 85 | + |
104 | 86 | # codespace-upload:
|
105 | 87 | # env:
|
106 | 88 | # IMAGE_NAME: input-output-hk/devx-devcontainer
|
|
0 commit comments