name: auto-update on: schedule: # Run daily at 06:00 UTC - cron: "0 6 * * *" workflow_dispatch: # Allow manual trigger jobs: check-and-update: runs-on: ubuntu-latest permissions: contents: write id-token: write steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 24 registry-url: https://registry.npmjs.org/ - run: npm install -g npm@latest - name: Get upstream version id: upstream run: | UPSTREAM=$(npm view @plannotator/pi-extension version) echo "version=$UPSTREAM" >> "$GITHUB_OUTPUT" echo "Upstream @plannotator/pi-extension version: $UPSTREAM" - name: Get current pinned version id: current run: | CURRENT=$(node -e "console.log(require('./package.json').devDependencies['@plannotator/pi-extension'].replace(/[\^~]/, ''))") echo "version=$CURRENT" >> "$GITHUB_OUTPUT" echo "Current pinned version: $CURRENT" - name: Check if update needed id: check run: | if [ "${{ steps.upstream.outputs.version }}" = "${{ steps.current.outputs.version }}" ]; then echo "skip=true" >> "$GITHUB_OUTPUT" echo "Already up to date." else echo "skip=false" >> "$GITHUB_OUTPUT" echo "Update available: ${{ steps.current.outputs.version }} -> ${{ steps.upstream.outputs.version }}" fi - name: Update package.json if: steps.check.outputs.skip == 'false' run: | UPSTREAM="${{ steps.upstream.outputs.version }}" # Align wrapper version to upstream node -e " const pkg = require('./package.json'); pkg.version = '${UPSTREAM}'; pkg.devDependencies['@plannotator/pi-extension'] = '${UPSTREAM}'; require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n'); " echo "Updated package.json to version $UPSTREAM" - name: Install and build if: steps.check.outputs.skip == 'false' run: | npm install npm run build - name: Commit, tag, and push if: steps.check.outputs.skip == 'false' run: | UPSTREAM="${{ steps.upstream.outputs.version }}" git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add -A git commit -m "auto-update: align to @plannotator/pi-extension@${UPSTREAM}" git tag "v${UPSTREAM}" git push origin main --tags - name: Publish to npm if: steps.check.outputs.skip == 'false' run: npm publish --provenance --access public