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: Setup Node if: steps.gate.outputs.run == 'true' uses: actions/setup-node@v4 with: node-version: 20 cache: npm - 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 https://github.com/embedpdf/embed-pdf-viewer ../embed-pdf-viewer - name: Install upstream deps if: steps.gate.outputs.run == 'true' working-directory: ../embed-pdf-viewer run: pnpm install --frozen-lockfile - name: Build snippet if: steps.gate.outputs.run == 'true' working-directory: ../embed-pdf-viewer run: pnpm run build:snippet - name: Pack snippet tarball if: steps.gate.outputs.run == 'true' working-directory: ../embed-pdf-viewer run: | npm pack ./snippet --pack-destination ../bentopdf/vendor/embedpdf ls -l ../bentopdf/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 - name: Write upstream version marker if: steps.gate.outputs.run == 'true' run: | echo "${{ steps.upstream-version.outputs.version }}" > vendor/embedpdf/.upstream-version - name: Create Pull Request if: steps.gate.outputs.run == 'true' uses: peter-evans/create-pull-request@v6 with: commit-message: 'chore: update embedpdf snippet' title: 'Update vendored EmbedPDF snippet' 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