name: Update EmbedPDF Snippet on: workflow_dispatch: schedule: - cron: '0 3 * * 1' # Weekly; adjust as needed jobs: update-snippet: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 - name: Read current upstream version marker id: current-version run: | if [ -f vendor/embedpdf/.upstream-version ]; then CUR=$(cat vendor/embedpdf/.upstream-version) else CUR="" fi echo "version=$CUR" >> "$GITHUB_OUTPUT" - name: Read latest upstream version (@embedpdf/core) id: upstream-version run: | LATEST=$(npm view @embedpdf/core version) echo "version=$LATEST" >> "$GITHUB_OUTPUT" - name: Should update? id: gate run: | if [ "${{ steps.upstream-version.outputs.version }}" = "${{ steps.current-version.outputs.version }}" ]; then echo "run=false" >> "$GITHUB_OUTPUT" echo "No upstream version change detected." else echo "run=true" >> "$GITHUB_OUTPUT" echo "Updating from '${{ steps.current-version.outputs.version }}' to '${{ steps.upstream-version.outputs.version }}'" fi - name: Enable corepack (pnpm) if: steps.gate.outputs.run == 'true' run: corepack enable - name: Prepare workspace if: steps.gate.outputs.run == 'true' run: | mkdir -p vendor/embedpdf npm config set cache ./\.npm-cache - name: Clone upstream embed-pdf-viewer if: steps.gate.outputs.run == 'true' run: git clone --depth 1 --branch main https://github.com/embedpdf/embed-pdf-viewer ./_upstream/embed-pdf-viewer - name: Setup Node if: steps.gate.outputs.run == 'true' uses: actions/setup-node@v4 with: node-version: 20 cache: npm - name: Install upstream deps if: steps.gate.outputs.run == 'true' working-directory: ./_upstream/embed-pdf-viewer run: pnpm install --no-frozen-lockfile - name: Build snippet if: steps.gate.outputs.run == 'true' working-directory: ./_upstream/embed-pdf-viewer run: pnpm run build:snippet - name: Pack snippet tarball if: steps.gate.outputs.run == 'true' working-directory: ./_upstream/embed-pdf-viewer run: | npm pack ./viewers/snippet --pack-destination ../../vendor/embedpdf ls -l ../../vendor/embedpdf - name: Sanitize tarball (rename pkg and pin deps) if: steps.gate.outputs.run == 'true' env: UPSTREAM_VERSION: ${{ steps.upstream-version.outputs.version }} run: | TARBALL=$(ls vendor/embedpdf/*.tgz | sort | tail -n1) TMP=$(mktemp -d) tar -xzf "$TARBALL" -C "$TMP" PKG="$TMP/package/package.json" PKG="$PKG" node - <<'NODE' const fs = require("fs"); const path = process.env.PKG; const ver = process.env.UPSTREAM_VERSION || "1.4.1"; const pkg = JSON.parse(fs.readFileSync(path, "utf8")); pkg.name = "embedpdf-snippet"; pkg.dependencies = pkg.dependencies || {}; for (const k of Object.keys(pkg.dependencies)) { if (k.startsWith("@embedpdf/")) pkg.dependencies[k] = `^${ver}`; if (k === "preact") pkg.dependencies[k] = "^10.17.0"; } fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + "\n"); NODE NEW=vendor/embedpdf/embedpdf-snippet-${UPSTREAM_VERSION}.tgz tar -czf "$NEW" -C "$TMP" package # Remove any older snippet tarballs, keep only the new one find vendor/embedpdf -maxdepth 1 -name 'embedpdf-snippet-*.tgz' ! -name "$(basename "$NEW")" -delete rm -rf "$TMP" ls -l vendor/embedpdf - name: Update package.json dependency path if: steps.gate.outputs.run == 'true' run: | TARBALL=$(ls vendor/embedpdf/embedpdf-snippet-*.tgz | sort | tail -n1) node -e "const fs=require('fs');const pkg=require('./package.json');const tar=process.argv[1];pkg.dependencies['embedpdf-snippet']='file:'+tar;fs.writeFileSync('package.json',JSON.stringify(pkg,null,2)+'\n');" "$TARBALL" - name: Refresh lockfile if: steps.gate.outputs.run == 'true' run: npm install --package-lock-only --ignore-scripts - name: Write upstream version marker if: steps.gate.outputs.run == 'true' run: | echo "${{ steps.upstream-version.outputs.version }}" > vendor/embedpdf/.upstream-version - name: Cleanup upstream clone if: steps.gate.outputs.run == 'true' run: rm -rf ./_upstream - name: Create Pull Request if: steps.gate.outputs.run == 'true' uses: peter-evans/create-pull-request@v6 with: commit-message: "build(deps): bump embedpdf-snippet from ${{ steps.current-version.outputs.version }} to ${{ steps.upstream-version.outputs.version }}" title: "build(deps): bump embedpdf-snippet from ${{ steps.current-version.outputs.version }} to ${{ steps.upstream-version.outputs.version }}" body: | - Build snippet from upstream embed-pdf-viewer via `npm run build:snippet` - Pack tarball into `vendor/embedpdf/` and point dependency to it - Refresh package-lock.json branch: chore/update-embedpdf-snippet delete-branch: true