diff --git a/.gitea/workflows/publish.yml b/.gitea/workflows/publish.yml index 8908e2f..f4d623f 100644 --- a/.gitea/workflows/publish.yml +++ b/.gitea/workflows/publish.yml @@ -15,32 +15,39 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.SHRINKSDK_PACKAGE_TOKEN }} steps: - - name: Install Git + - name: Fetch exact tagged release archive + env: + GITEA_REF: ${{ gitea.ref }} shell: bash run: | set -eu - if ! command -v git >/dev/null 2>&1; then - apt-get update - DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git ca-certificates - rm -rf /var/lib/apt/lists/* - fi + tag="${GITEA_REF#refs/tags/}" + case "$tag" in + v[0-9]*) ;; + *) echo "Expected a version tag ref, got: $GITEA_REF" >&2; exit 1 ;; + esac + export SHRINKSDK_ARCHIVE_URL="https://git.crash.work/ShrinkSDK/ShrinkApp.Starter.Basic/archive/${tag}.tar.gz" + node --input-type=module <<'NODE' + import { writeFile } from 'node:fs/promises'; - - name: Fetch tagged revision - shell: bash - run: | - set -eu - ref="${{ gitea.sha }}" - test -n "$ref" - git init . - git remote add origin "https://git.crash.work/ShrinkSDK/ShrinkApp.Starter.Basic.git" - git fetch --depth=1 --tags origin "$ref" - git checkout --detach FETCH_HEAD + const response = await fetch(process.env.SHRINKSDK_ARCHIVE_URL); + if (!response.ok) { + throw new Error(`Release archive download failed: ${response.status} ${response.statusText}`); + } + + await writeFile('release.tar.gz', new Uint8Array(await response.arrayBuffer())); + NODE + mkdir release + tar -xzf release.tar.gz --strip-components=1 -C release + rm -f release.tar.gz + printf '%s' "$tag" > release/.shrink-sdk-release-tag - name: Validate immutable release version shell: bash run: | set -eu - tag="$(git describe --exact-match --tags HEAD)" + cd release + tag="$(cat .shrink-sdk-release-tag)" version="$(node -p "require('./package.json').version")" test "$tag" = "v$version" npm pack --dry-run @@ -50,10 +57,11 @@ jobs: run: | set -eu : "${NODE_AUTH_TOKEN:?SHRINKSDK_PACKAGE_TOKEN is required}" + cd release npmrc="$HOME/.npmrc" cleanup() { rm -f "$npmrc"; } trap cleanup EXIT printf '%s\n' \ 'registry=https://git.crash.work/api/packages/ShrinkSDK/npm/' \ '//git.crash.work/api/packages/ShrinkSDK/npm/:_authToken=${NODE_AUTH_TOKEN}' > "$npmrc" - npm publish --registry=https://git.crash.work/api/packages/ShrinkSDK/npm/ \ No newline at end of file + npm publish --registry=https://git.crash.work/api/packages/ShrinkSDK/npm/