mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-09 17:51:46 +00:00
148 lines
4.4 KiB
YAML
148 lines
4.4 KiB
YAML
name: Build PR Artifacts
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, synchronize, reopened]
|
|
|
|
env:
|
|
NODE_VERSION: "22.x"
|
|
|
|
jobs:
|
|
check-permissions:
|
|
if: github.event.pull_request.draft == false
|
|
name: Check if user has write access
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
has-write-access: ${{ steps.check.outputs.require-result }}
|
|
steps:
|
|
- name: Check user permission
|
|
id: check
|
|
uses: actions-cool/check-user-permission@v2
|
|
with:
|
|
require: write
|
|
username: ${{ github.event.pull_request.user.login }}
|
|
|
|
build:
|
|
name: Build ${{ matrix.os }}
|
|
needs: check-permissions
|
|
if: needs.check-permissions.outputs.has-write-access == 'true'
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [macos-latest, ubuntu-latest, windows-latest]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Install pnpm
|
|
uses: pnpm/action-setup@v4
|
|
with:
|
|
version: 10
|
|
run_install: false
|
|
|
|
- name: Setup NodeJS
|
|
if: startsWith(matrix.os, 'macOS') != true
|
|
uses: actions/setup-node@v5
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
cache: 'pnpm'
|
|
|
|
- name: Setup NodeJS for macOS
|
|
if: startsWith(matrix.os, 'macOS')
|
|
uses: actions/setup-node@v5
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
|
|
- name: Install dependencies
|
|
run: pnpm install --frozen-lockfile
|
|
|
|
- name: Build on macOS
|
|
if: startsWith(matrix.os, 'macOS')
|
|
run: |
|
|
pnpm dist:mac
|
|
pnpm dist:mac:arm64
|
|
|
|
- name: Install Linux dependencies
|
|
if: startsWith(matrix.os, 'ubuntu')
|
|
run: |
|
|
sudo snap install snapcraft --classic
|
|
sudo apt update
|
|
sudo apt install -y flatpak flatpak-builder
|
|
sudo flatpak remote-add --if-not-exists --system flathub https://flathub.org/repo/flathub.flatpakrepo
|
|
sudo flatpak install -y flathub org.freedesktop.Platform/x86_64/24.08
|
|
sudo flatpak install -y flathub org.freedesktop.Sdk/x86_64/24.08
|
|
sudo flatpak install -y flathub org.electronjs.Electron2.BaseApp/x86_64/24.08
|
|
|
|
- name: Build on Linux
|
|
if: startsWith(matrix.os, 'ubuntu')
|
|
run: |
|
|
pnpm dist:linux
|
|
pnpm dist:linux:deb-arm64
|
|
pnpm dist:linux:rpm-arm64
|
|
|
|
- name: Build on Windows
|
|
if: startsWith(matrix.os, 'windows')
|
|
run: |
|
|
pnpm dist:win
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: build-artifacts-${{ matrix.os }}
|
|
path: pack/
|
|
retention-days: 7
|
|
if-no-files-found: error
|
|
|
|
comment:
|
|
name: Comment on PR
|
|
needs: [check-permissions, build]
|
|
if: always() && needs.check-permissions.outputs.has-write-access == 'true'
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
pull-requests: write
|
|
steps:
|
|
- name: Create comment
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const runId = context.runId;
|
|
const runUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`;
|
|
|
|
const buildResult = '${{ needs.build.result }}';
|
|
|
|
let comment;
|
|
if (buildResult === 'success') {
|
|
comment = `## 🚀 Build Artifacts Ready!
|
|
|
|
The builds have completed successfully. You can download the artifacts from the workflow run:
|
|
|
|
**[📦 Download Artifacts](${runUrl})**
|
|
|
|
### Available builds:
|
|
- **Windows**: \`build-artifacts-windows-latest\`
|
|
- **macOS**: \`build-artifacts-macos-latest\`
|
|
- **Linux**: \`build-artifacts-ubuntu-latest\`
|
|
|
|
*Note: Artifacts are available for 7 days.*`;
|
|
} else if (buildResult === 'failure') {
|
|
comment = `## ❌ Build Failed
|
|
|
|
Unfortunately, one or more builds failed. Please check the workflow run for details:
|
|
|
|
**[View Workflow Run](${runUrl})**`;
|
|
} else {
|
|
comment = `## ⚠️ Build Status: ${buildResult}
|
|
|
|
The build process completed with status: **${buildResult}**
|
|
|
|
**[View Workflow Run](${runUrl})**`;
|
|
}
|
|
|
|
github.rest.issues.createComment({
|
|
issue_number: context.issue.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
body: comment
|
|
});
|