name: Build and Release on: push: tags: - 'v*' permissions: contents: write jobs: create-release: runs-on: ubuntu-latest outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} steps: - name: Check out Git repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Generate release notes id: release_notes run: | # Get the previous tag PREVIOUS_TAG=$(git tag --sort=-version:refname | grep -v "$(git describe --tags --abbrev=0)" | head -n 1) # Generate changelog if [ -z "$PREVIOUS_TAG" ]; then CHANGELOG=$(git log --pretty=format:"- %s (%h)" ${{ github.ref_name }}) else CHANGELOG=$(git log --pretty=format:"- %s (%h)" ${PREVIOUS_TAG}..${{ github.ref_name }}) fi # Save to output echo "CHANGELOG<> $GITHUB_OUTPUT echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref_name }} release_name: Release ${{ github.ref_name }} body: | ## Changes ${{ steps.release_notes.outputs.CHANGELOG }} draft: false prerelease: ${{ contains(github.ref_name, 'beta') || contains(github.ref_name, 'alpha') }} build: needs: create-release runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, ubuntu-latest] steps: - name: Check out Git repository uses: actions/checkout@v4 - name: Install Node.js uses: actions/setup-node@v4 with: node-version: 20 - name: Install dependencies run: npm install - name: Build and publish run: npm run dist env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}