GreenDamTan build dev sha 3a4fd924a27c46901af4641ed6ec51037d85fdb5 #22
This file contains hidden or 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: Test Release | |
| run-name: ${{ github.actor }} build ${{ github.ref_name }} sha ${{ github.sha }} | |
| permissions: | |
| contents: write | |
| actions: write | |
| concurrency: | |
| group: release-${{ github.ref }} | |
| cancel-in-progress: true | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| make_release: | |
| description: "Do you want to create a release?" | |
| required: true | |
| type: boolean | |
| default: false | |
| enable_ccache: | |
| description: "Do you want to enable ccache?" | |
| required: true | |
| type: boolean | |
| default: true | |
| env: | |
| proj_name: "appstore.driver.gpu.nvidia.grid" | |
| kernel_module_package_name: "appstore.driver.gpu.nvidia.ko" | |
| jobs: | |
| validate_version_matrix: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository code | |
| uses: actions/checkout@v6 | |
| - name: Validate driver version matrix | |
| run: | | |
| python3 - <<'PY' | |
| import re | |
| from collections import Counter | |
| from pathlib import Path | |
| workflow = Path(".github/workflows/test_release.yml").read_text(encoding="utf-8") | |
| expected = { | |
| ("580.159.03-3", "580.159.03"), | |
| ("535.309.01-1", "535.309.01"), | |
| } | |
| expected_counts = { | |
| "580.159.03-3": 8, | |
| "535.309.01-1": 7, | |
| } | |
| pairs = set(re.findall( | |
| r'^\s+- this_pack_version: "([^"]+)"\n\s+this_pack_nvidia_driver_version: "([^"]+)"', | |
| workflow, | |
| flags=re.M, | |
| )) | |
| if pairs != expected: | |
| print(f"Unexpected package/driver pairs: {sorted(pairs)}") | |
| raise SystemExit(1) | |
| versions = Counter(re.findall(r'^\s+- this_pack_version: "([^"]+)"', workflow, flags=re.M)) | |
| for this_pack_version, expected_count in sorted(expected_counts.items()): | |
| if versions[this_pack_version] != expected_count: | |
| print(f"{this_pack_version}: expected {expected_count} matrix entries, found {versions[this_pack_version]}") | |
| raise SystemExit(1) | |
| PY | |
| prepare_driver_package: | |
| uses: ./.github/workflows/nvidia-grid-kernel-src.yml | |
| secrets: inherit | |
| needs: | |
| - validate_version_matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - this_pack_version: "580.159.03-3" | |
| this_pack_nvidia_driver_version: "580.159.03" | |
| this_pack_nvidia_driver_page_url: "https://www.nvidia.com/en-us/drivers/details/267577/" | |
| this_pack_grid_download_url: "https://alist.homelabproject.cc/d/foxipan/vGPU/19.5/NVIDIA-GRID-Linux-KVM-580.159.01-580.159.03-582.53/Guest_Drivers/NVIDIA-Linux-x86_64-580.159.03-grid.run" | |
| this_pack_grid_run: "NVIDIA-Linux-x86_64-580.159.03-grid.run" | |
| this_pack_nvlts_version: "" | |
| - this_pack_version: "535.309.01-1" | |
| this_pack_nvidia_driver_version: "535.309.01" | |
| this_pack_nvidia_driver_page_url: "https://www.nvidia.cn/drivers/details/267227/" | |
| this_pack_grid_download_url: "https://alist.homelabproject.cc/d/foxipan/vGPU/16.14/NVIDIA-GRID-Linux-KVM-535.309.01-539.72/Guest_Drivers/NVIDIA-Linux-x86_64-535.309.01-grid.run" | |
| this_pack_grid_run: "NVIDIA-Linux-x86_64-535.309.01-grid.run" | |
| this_pack_nvlts_version: "" | |
| with: | |
| driver_pkg_artifact: nvidia-grid-kernel-src-${{ matrix.this_pack_nvidia_driver_version }} | |
| firmware_artifact: nvidia-grid-firmware-${{ matrix.this_pack_nvidia_driver_version }} | |
| runfile_artifact: nvidia-grid-runfile-${{ matrix.this_pack_nvidia_driver_version }} | |
| this_pack_grid_download_url: ${{ matrix.this_pack_grid_download_url }} | |
| this_pack_grid_run: ${{ matrix.this_pack_grid_run }} | |
| prepare_nvlts: | |
| uses: ./.github/workflows/nvlts.yml | |
| secrets: inherit | |
| needs: | |
| - validate_version_matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - this_pack_version: "580.159.03-3" | |
| this_pack_nvidia_driver_version: "580.159.03" | |
| this_pack_nvlts_version: "" | |
| with: | |
| nvlts_version: ${{ matrix.this_pack_nvlts_version }} | |
| nvlts_artifact: nvlts-${{ matrix.this_pack_nvidia_driver_version }} | |
| package_kernel_space: | |
| uses: ./.github/workflows/kernel_space.yml | |
| secrets: inherit | |
| needs: | |
| - prepare_driver_package | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - this_pack_version: "580.159.03-3" | |
| this_pack_nvidia_driver_version: "580.159.03" | |
| this_pack_nvidia_driver_page_url: "https://www.nvidia.com/en-us/drivers/details/267577/" | |
| - this_pack_version: "535.309.01-1" | |
| this_pack_nvidia_driver_version: "535.309.01" | |
| this_pack_nvidia_driver_page_url: "https://www.nvidia.cn/drivers/details/267227/" | |
| with: | |
| kernel_module_package_name: appstore.driver.gpu.nvidia.ko | |
| this_pack_version: ${{ matrix.this_pack_version }} | |
| this_pack_nvidia_driver_version: ${{ matrix.this_pack_nvidia_driver_version }} | |
| this_pack_nvidia_driver_page_url: ${{ matrix.this_pack_nvidia_driver_page_url }} | |
| driver_pkg_artifact: nvidia-grid-kernel-src-${{ matrix.this_pack_nvidia_driver_version }} | |
| firmware_artifact: nvidia-grid-firmware-${{ matrix.this_pack_nvidia_driver_version }} | |
| enable_ccache: ${{ inputs.enable_ccache }} | |
| prune_ccache: | |
| if: ${{ always() && inputs.enable_ccache }} | |
| needs: | |
| - package_kernel_space | |
| runs-on: ubuntu-latest | |
| permissions: | |
| actions: write | |
| steps: | |
| - name: Keep latest two ccache entries per kernel and driver | |
| continue-on-error: true | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| GH_REPO: ${{ github.repository }} | |
| run: | | |
| set -euo pipefail | |
| echo "Repository: $GH_REPO" | |
| echo "Authenticated as: $(gh api user --jq .login 2>/dev/null || echo unknown)" | |
| echo "Listing ccache entries..." | |
| caches_file="$(mktemp)" | |
| delete_file="$(mktemp)" | |
| gh cache list --key ccache- --limit 1000 --json id,key,createdAt,lastAccessedAt,sizeInBytes > "$caches_file" | |
| cache_count="$(jq 'length' "$caches_file")" | |
| echo "Found $cache_count cache entries with ccache- prefix." | |
| jq -r ' | |
| sort_by(.key) | |
| | .[] | |
| | "- id=\(.id) key=\(.key) createdAt=\(.createdAt) lastAccessedAt=\(.lastAccessedAt) size=\(.sizeInBytes)" | |
| ' "$caches_file" | |
| jq -c ' | |
| map(select(.key | test("^ccache-.+-[0-9]+-[0-9]+$"))) | |
| | group_by(.key | sub("-[0-9]+-[0-9]+$"; "")) | |
| | map(sort_by(.createdAt) | reverse | .[2:][]?) | |
| | .[] | |
| ' "$caches_file" > "$delete_file" | |
| delete_count="$(jq -s 'length' "$delete_file")" | |
| if [ "$delete_count" -eq 0 ]; then | |
| echo "No old ccache entries to delete." | |
| exit 0 | |
| fi | |
| echo "Deleting $delete_count old ccache entries. Keeping latest two entries per key prefix." | |
| jq -r ' | |
| "- id=\(.id) key=\(.key) createdAt=\(.createdAt) lastAccessedAt=\(.lastAccessedAt) size=\(.sizeInBytes)" | |
| ' "$delete_file" | |
| while IFS= read -r cache; do | |
| [ -n "$cache" ] || continue | |
| cache_id="$(jq -r '.id' <<< "$cache")" | |
| cache_key="$(jq -r '.key' <<< "$cache")" | |
| cache_created_at="$(jq -r '.createdAt' <<< "$cache")" | |
| echo "::group::Delete cache id=$cache_id key=$cache_key" | |
| echo "createdAt=$cache_created_at" | |
| if output="$(gh cache delete "$cache_id" 2>&1)"; then | |
| echo "Deleted cache id=$cache_id key=$cache_key" | |
| else | |
| status="$?" | |
| echo "::warning::Failed to delete cache id=$cache_id key=$cache_key exit=$status" | |
| echo "$output" | |
| fi | |
| echo "::endgroup::" | |
| done < "$delete_file" | |
| package_user_space: | |
| uses: ./.github/workflows/user_space.yml | |
| secrets: inherit | |
| needs: | |
| - prepare_driver_package | |
| - prepare_nvlts | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - this_pack_version: "580.159.03-3" | |
| this_pack_nvidia_driver_version: "580.159.03" | |
| this_pack_nvidia_driver_page_url: "https://www.nvidia.com/en-us/drivers/details/267577/" | |
| this_pack_grid_run: "NVIDIA-Linux-x86_64-580.159.03-grid.run" | |
| this_pack_enable_nvlts: true | |
| - this_pack_version: "535.309.01-1" | |
| this_pack_nvidia_driver_version: "535.309.01" | |
| this_pack_nvidia_driver_page_url: "https://www.nvidia.cn/drivers/details/267227/" | |
| this_pack_grid_run: "NVIDIA-Linux-x86_64-535.309.01-grid.run" | |
| this_pack_enable_nvlts: false | |
| with: | |
| this_pack_version: ${{ matrix.this_pack_version }} | |
| this_pack_nvidia_driver_version: ${{ matrix.this_pack_nvidia_driver_version }} | |
| this_pack_nvidia_driver_page_url: ${{ matrix.this_pack_nvidia_driver_page_url }} | |
| this_pack_grid_run: ${{ matrix.this_pack_grid_run }} | |
| runfile_artifact: nvidia-grid-runfile-${{ matrix.this_pack_nvidia_driver_version }} | |
| nvlts_artifact: nvlts-${{ matrix.this_pack_nvidia_driver_version }} | |
| enable_nvlts: ${{ matrix.this_pack_enable_nvlts }} | |
| manifest_platform: x86 | |
| create_release: | |
| if: ${{ inputs.make_release }} | |
| needs: | |
| - package_kernel_space | |
| - package_user_space | |
| runs-on: ubuntu-latest | |
| outputs: | |
| release_tag: ${{ steps.vars.outputs.release_tag }} | |
| release_title: ${{ steps.vars.outputs.release_title }} | |
| steps: | |
| - name: Prepare release tag | |
| id: vars | |
| run: | | |
| release_title="$(TZ=Asia/Shanghai date '+%Y.%m.%d %H:%M:%S')" | |
| release_tag="$(printf '%s' "${release_title}" | tr ' :' '--')" | |
| { | |
| echo "release_title=${release_title}" | |
| echo "release_tag=${release_tag}" | |
| } >> "$GITHUB_OUTPUT" | |
| echo "Release title: ${release_title}" | |
| echo "Release tag: ${release_tag}" | |
| - name: Create GitHub Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| if gh release view "${{ steps.vars.outputs.release_tag }}" --repo "${GITHUB_REPOSITORY}" >/dev/null 2>&1; then | |
| echo "Release ${{ steps.vars.outputs.release_tag }} already exists, skipping create." | |
| else | |
| gh release create "${{ steps.vars.outputs.release_tag }}" \ | |
| --repo "${GITHUB_REPOSITORY}" \ | |
| --title "fnnas.appstore.driver.gpu.nvidia.grid ${{ steps.vars.outputs.release_title }}" \ | |
| --prerelease | |
| fi | |
| upload_release_assets: | |
| if: ${{ inputs.make_release }} | |
| needs: | |
| - create_release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - this_pack_version: "580.159.03-3" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.ko" | |
| package_name_suffix: "6.18.18-trim-427-amd64" | |
| - this_pack_version: "580.159.03-3" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.ko" | |
| package_name_suffix: "6.18.18-trim-570-amd64" | |
| - this_pack_version: "580.159.03-3" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.ko" | |
| package_name_suffix: "6.18.18-trim-587-amd64" | |
| - this_pack_version: "580.159.03-3" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.user" | |
| package_name_suffix: "x86" | |
| - this_pack_version: "535.309.01-1" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.ko" | |
| package_name_suffix: "6.18.18-trim-427-amd64" | |
| - this_pack_version: "535.309.01-1" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.ko" | |
| package_name_suffix: "6.18.18-trim-570-amd64" | |
| - this_pack_version: "535.309.01-1" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.ko" | |
| package_name_suffix: "6.18.18-trim-587-amd64" | |
| - this_pack_version: "535.309.01-1" | |
| package_name_prefix: "appstore.driver.gpu.nvidia.user" | |
| package_name_suffix: "x86" | |
| steps: | |
| - name: Download package | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: ${{ matrix.package_name_prefix }}-${{ matrix.this_pack_version }}-${{ matrix.package_name_suffix }}.tgz | |
| path: release-assets/ | |
| - name: Rename package extension to fpk | |
| run: | | |
| set -euo pipefail | |
| package_name="${{ matrix.package_name_prefix }}-${{ matrix.this_pack_version }}-${{ matrix.package_name_suffix }}.tgz" | |
| fpk_name="${package_name}.fpk" | |
| echo "Renaming ${package_name} to ${fpk_name}" | |
| mv "release-assets/${package_name}" "release-assets/${fpk_name}" | |
| - name: Upload Release Assets | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| echo "Uploading release assets..." | |
| package_name="${{ matrix.package_name_prefix }}-${{ matrix.this_pack_version }}-${{ matrix.package_name_suffix }}.tgz.fpk" | |
| echo "Uploading ${package_name}" | |
| gh release upload "${{ needs.create_release.outputs.release_tag }}" "release-assets/${package_name}" --repo "${GITHUB_REPOSITORY}" --clobber | |
| echo "Upload completed!" | |
| verify_release_assets: | |
| if: ${{ inputs.make_release }} | |
| needs: | |
| - upload_release_assets | |
| - create_release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Verify Uploaded Assets | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| echo "Uploaded assets for ${{ needs.create_release.outputs.release_tag }}:" | |
| gh release view "${{ needs.create_release.outputs.release_tag }}" --repo "${GITHUB_REPOSITORY}" --json assets -q '.assets[].name' |