name: Auto Bump & Publish - copito on: workflow_dispatch: schedule: # Ogni 5 minuti - cron: '*/5 * * * *' repository_dispatch: types: [auto-bump] # Blocca le esecuzioni parallele: le nuove run vengono messe in coda concurrency: group: auto-bump-${{ github.ref }} cancel-in-progress: false jobs: copilot-setup-steps: runs-on: ubuntu-latest permissions: contents: read steps: - name: Hello World Check run: echo "Hello, world! GitHub Copilot job is set up and running." improve-with-copilot: needs: copilot-setup-steps runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 token: ${{ secrets.GH_PAT }} - name: Apply real code improvement run: | node - << 'EOF' const fs = require('fs'); // Add verbose option to CLI let cli = fs.readFileSync('cli.js', 'utf8'); cli = cli.replace( ".option('-i, --incremental', 'scan only changed files in the last commit')", ".option('-i, --incremental', 'scan only changed files in the last commit')\n .option('-v, --verbose', 'output verbose logs')" ); fs.writeFileSync('cli.js', cli); // Extend scan() signature to accept verbose let scanner = fs.readFileSync('scanner.js', 'utf8'); scanner = scanner.replace( "export async function scan(target, { mode = 'default', incremental = false, stream = false } = {})", "export async function scan(target, { mode = 'default', incremental = false, stream = false, verbose = false } = {})" ); fs.writeFileSync('scanner.js', scanner); // Update README.md with verbose usage let readme = fs.readFileSync('README.md', 'utf8'); readme += "\n## Verbose Mode\nUse `--verbose` to output detailed logs during scanning.\n"; fs.writeFileSync('README.md', readme); // Prepend CHANGELOG entry for verbose flag const pkg = require('./package.json'); const version = pkg.version; const date = new Date().toISOString().split('T')[0]; let changelog = fs.readFileSync('CHANGELOG.md', 'utf8'); changelog = `## [${version}] - ${date}\n\n### Added\n- \`--verbose\` flag for detailed logging\n\n${changelog}`; fs.writeFileSync('CHANGELOG.md', changelog); EOF - name: Update CHANGELOG.md run: | VERSION=$(node -p "require('./package.json').version") DATE=$(date +%Y-%m-%d) echo -e "## [$VERSION] - $DATE\n\n- Inserted startup log message\n" | cat - CHANGELOG.md > CHANGELOG.tmp && mv CHANGELOG.tmp CHANGELOG.md - name: Commit and push improvement run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add cli.js scanner.js README.md CHANGELOG.md git commit -m "chore: add verbose flag for detailed logging" || echo "No changes to commit" git push origin main publish: needs: improve-with-copilot runs-on: ubuntu-latest steps: - name: Checkout main branch uses: actions/checkout@v3 with: fetch-depth: 0 token: ${{ secrets.GH_PAT }} ref: main - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: '20' - name: Configure npm auth run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc - name: Bump version for publish id: bump_publish run: | npm version patch --no-git-tag-version NEW_VERSION=$(node -p "require('./package.json').version") echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT - name: Commit version bump run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add package.json if git diff --cached --quiet; then echo "No version bump to commit." else git commit -m "chore(release): bump version to ${{ steps.bump_publish.outputs.new_version }}" git push origin main fi - name: Publish package run: | npm publish --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Trigger next run uses: actions/github-script@v6 with: github-token: ${{ secrets.GH_PAT }} script: | await github.rest.repos.createDispatchEvent({ owner: context.repo.owner, repo: context.repo.repo, event_type: 'auto-bump', client_payload: {} })