feat: night-shift roadmap — streamable HTTP, cell sync, terminal inte… #41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| branches: | |
| - main # semantic-release works on branch pushes, not tags | |
| workflow_dispatch: # Allow manual trigger | |
| inputs: | |
| dry_run: | |
| description: "Run in dry-run mode (no actual release)" | |
| required: false | |
| type: boolean | |
| default: false | |
| concurrency: | |
| group: semantic-release | |
| cancel-in-progress: false | |
| permissions: | |
| contents: write # Required for creating releases and pushing commits | |
| issues: write # Required for commenting on issues | |
| pull-requests: write # Required for commenting on PRs | |
| jobs: | |
| # Call the CI workflow to run all validation, linting, tests, and build | |
| ci: | |
| name: Run CI | |
| uses: ./.github/workflows/ci.yml | |
| # Automated release with semantic-release | |
| # Creates GitHub releases, updates package.json and CHANGELOG.md, and commits changes back to main | |
| release: | |
| name: Semantic Release | |
| runs-on: ubuntu-latest | |
| needs: ci | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 # Fetch all history for semantic-release | |
| token: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }} | |
| persist-credentials: true | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: "22" | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Verify package.json and package-lock.json are in sync | |
| run: npm ci --dry-run | |
| - name: Build and package VSIX | |
| run: npm run package | |
| - name: Get VSIX filename | |
| id: vsix_file | |
| run: | | |
| VSIX_FILE=$(ls *.vsix | head -n 1) | |
| echo "filename=$VSIX_FILE" >> $GITHUB_OUTPUT | |
| echo "Built VSIX file: $VSIX_FILE" | |
| - name: Run semantic-release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }} | |
| VSCE_PAT: ${{ secrets.VSCE_PAT }} | |
| run: | | |
| if [ "${{ github.event.inputs.dry_run }}" = "true" ]; then | |
| echo "Running in dry-run mode (no commits will be pushed)..." | |
| npx semantic-release --dry-run | |
| else | |
| echo "Running semantic-release..." | |
| echo "This will create a GitHub release, update package.json/CHANGELOG.md, and commit changes back to main" | |
| npx semantic-release | |
| fi | |
| - name: Format CHANGELOG after semantic-release | |
| if: success() && github.event.inputs.dry_run != 'true' | |
| run: | | |
| if git diff --name-only HEAD~1 | grep -q "CHANGELOG.md"; then | |
| echo "CHANGELOG.md was updated, formatting it..." | |
| npx prettier --write CHANGELOG.md | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add CHANGELOG.md | |
| git commit -m "chore: format CHANGELOG [skip ci]" || echo "No formatting changes needed" | |
| git push | |
| else | |
| echo "CHANGELOG.md was not updated, skipping formatting" | |
| fi | |
| - name: Upload VSIX to release (fallback if semantic-release fails) | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| env: | |
| VSCE_PAT: ${{ secrets.VSCE_PAT }} | |
| with: | |
| name: vsix-package-release | |
| path: ${{ steps.vsix_file.outputs.filename }} | |
| retention-days: 90 |