name: CI on: push: branches: [master, dev] pull_request: branches: [master] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install env: BUN_INSTALL_ALLOW_SCRIPTS: "@ast-grep/napi" - name: Run tests run: bun test typecheck: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install env: BUN_INSTALL_ALLOW_SCRIPTS: "@ast-grep/napi" - name: Type check run: bun run typecheck build: runs-on: ubuntu-latest needs: [test, typecheck] permissions: contents: write steps: - uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} - uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install env: BUN_INSTALL_ALLOW_SCRIPTS: "@ast-grep/napi" - name: Build run: bun run build - name: Verify build output run: | test -f dist/index.js || (echo "ERROR: dist/index.js not found!" && exit 1) test -f dist/index.d.ts || (echo "ERROR: dist/index.d.ts not found!" && exit 1) - name: Auto-commit schema changes if: github.event_name == 'push' && github.ref == 'refs/heads/master' run: | if git diff --quiet assets/oh-my-opencode.schema.json; then echo "No schema changes to commit" else git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add assets/oh-my-opencode.schema.json git commit -m "chore: auto-update schema.json" git push fi draft-release: runs-on: ubuntu-latest needs: [build] if: github.event_name == 'push' && github.ref == 'refs/heads/dev' permissions: contents: write steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - run: git fetch --force --tags - uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Generate release notes id: notes run: | NOTES=$(bun run script/generate-changelog.ts) echo "notes<> $GITHUB_OUTPUT echo "$NOTES" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create or update draft release run: | EXISTING_DRAFT=$(gh release list --json tagName,isDraft --jq '.[] | select(.isDraft == true and .tagName == "next") | .tagName') if [ -n "$EXISTING_DRAFT" ]; then echo "Updating existing draft release..." gh release edit next \ --title "Upcoming Changes 🍿" \ --notes "${{ steps.notes.outputs.notes }}" \ --draft else echo "Creating new draft release..." gh release create next \ --title "Upcoming Changes 🍿" \ --notes "${{ steps.notes.outputs.notes }}" \ --draft \ --target ${{ github.sha }} fi env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}