name: Build YouTube Music on: push: branches: [ master ] pull_request: env: NODE_VERSION: "20.x" jobs: build: name: Build YouTube Music runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: os: [ macos-latest, ubuntu-latest, windows-latest ] steps: - uses: actions/checkout@v4 - name: Setup NodeJS uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' - name: Install dependencies run: npm ci - name: Test uses: GabrielBB/xvfb-action@v1 env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 with: run: npm run test # Build and release if it's the main repository - name: Build and release on Mac if: startsWith(matrix.os, 'macOS') && github.repository == 'th-ch/youtube-music' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | npm run release:mac - name: Build and release on Linux if: startsWith(matrix.os, 'ubuntu') && github.repository == 'th-ch/youtube-music' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | npm run release:linux - name: Build and release on Windows if: startsWith(matrix.os, 'windows') && github.repository == 'th-ch/youtube-music' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | npm run release:win # Only build without release if it is a fork - name: Build on Mac if: startsWith(matrix.os, 'macOS') && github.repository != 'th-ch/youtube-music' run: | npm run build:mac - name: Build on Linux if: startsWith(matrix.os, 'ubuntu') && github.repository != 'th-ch/youtube-music' run: | npm run build:linux - name: Build on Windows if: startsWith(matrix.os, 'windows') && github.repository != 'th-ch/youtube-music' run: | npm run build:win release: runs-on: ubuntu-latest name: Release YouTube Music if: github.repository == 'th-ch/youtube-music' && github.ref == 'refs/heads/master' needs: build steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup NodeJS uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' - name: Install dependencies run: npm ci - name: Get version run: | echo "VERSION_TAG=v$(node -pe "require('./package.json').version")" >> $GITHUB_ENV - name: Check if version already exists in tags run: | echo "VERSION_HASH=$(git rev-parse -q --verify 'refs/tags/${{ env.VERSION_TAG }}')" >> $GITHUB_ENV echo "CHANGELOG_ANCHOR=$(echo $VERSION_TAG | sed -e 's/\.//g')" >> $GITHUB_ENV - name: Fetch draft release if: ${{ env.VERSION_HASH == '' }} uses: cardinalby/git-get-release-action@v1 id: get_draft_release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: latest: true draft: true searchLimit: 1 - name: Publish Release (if it does not exist) if: ${{ env.VERSION_HASH == '' }} uses: irongut/EditRelease@v1.2.0 with: token: ${{ secrets.GITHUB_TOKEN }} id: ${{ steps.get_draft_release.outputs.id }} draft: false prerelease: false replacename: true name: ${{ env.VERSION_TAG }} replacebody: true body: | See [changelog](https://github.com/th-ch/youtube-music/blob/master/changelog.md#${{ env.CHANGELOG_ANCHOR }}) for the list of updates and the full diff. Thanks to all contributors! 🏅 - name: Update changelog if: ${{ env.VERSION_HASH == '' }} run: | npm run changelog - name: Commit changelog if: ${{ env.VERSION_HASH == '' }} uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: Update changelog for ${{ env.VERSION_TAG }} file_pattern: "changelog.md" commit_user_name: CI commit_user_email: th-ch@users.noreply.github.com