From dcc08850298c2a33bbdb83df21c2aff4e00e6dc3 Mon Sep 17 00:00:00 2001 From: cneicy Date: Sat, 5 Sep 2026 03:53:48 +0800 Subject: [PATCH] ci: bootstrap .NET SDK without system packages --- .gitea/workflows/publish-nuget.yml | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/publish-nuget.yml b/.gitea/workflows/publish-nuget.yml index d753545..2ad6c02 100644 --- a/.gitea/workflows/publish-nuget.yml +++ b/.gitea/workflows/publish-nuget.yml @@ -46,11 +46,23 @@ jobs: shell: bash run: | set -euo pipefail - apt-get update - apt-get install -y --no-install-recommends ca-certificates curl - rm -rf /var/lib/apt/lists/* - curl -fsSL --retry 3 https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh - bash /tmp/dotnet-install.sh --channel 8.0 --install-dir /opt/dotnet + node --input-type=module <<'NODE' + import { writeFile } from 'node:fs/promises'; + + const metadataResponse = await fetch('https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/8.0/releases.json'); + if (!metadataResponse.ok) throw new Error(`Release metadata download failed: ${metadataResponse.status}`); + const metadata = await metadataResponse.json(); + const sdkVersion = metadata['latest-sdk']; + const release = metadata.releases.find(item => item.sdk?.version === sdkVersion); + const file = release?.sdk?.files?.find(item => item.rid === 'linux-x64' && item.name.endsWith('.tar.gz')); + if (!file) throw new Error(`Linux x64 SDK archive not found for ${sdkVersion}`); + const archiveResponse = await fetch(file.url); + if (!archiveResponse.ok) throw new Error(`SDK download failed: ${archiveResponse.status}`); + await writeFile('/tmp/dotnet-sdk.tar.gz', new Uint8Array(await archiveResponse.arrayBuffer())); + NODE + mkdir -p /opt/dotnet + tar -xzf /tmp/dotnet-sdk.tar.gz -C /opt/dotnet + rm -f /tmp/dotnet-sdk.tar.gz /opt/dotnet/dotnet --info - name: Validate, pack and publish @@ -88,4 +100,3 @@ jobs: if compgen -G 'packages/*.snupkg' > /dev/null; then dotnet nuget push 'packages/*.snupkg' --api-key "$NUGET_AUTH_TOKEN" --source https://git.crash.work/api/packages/ShrinkSDK/nuget/index.json --skip-duplicate fi -