mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-15 04:51:06 +02:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9ae4be9336 | |||
| 1686e7ad0b | |||
| bf6047da17 | |||
| c3b4a9edf8 | |||
| 0340cc8a85 | |||
| 3f7a402ce8 |
@@ -151,8 +151,7 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:win
|
pnpm run publish:win:beta
|
||||||
pnpm run publish:win
|
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|
||||||
- name: Build and Publish releases (macOS)
|
- name: Build and Publish releases (macOS)
|
||||||
@@ -166,8 +165,7 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:mac
|
pnpm run publish:mac:beta
|
||||||
pnpm run publish:mac
|
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|
||||||
- name: Build and Publish releases (Linux)
|
- name: Build and Publish releases (Linux)
|
||||||
@@ -181,8 +179,7 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:linux
|
pnpm run publish:linux:beta
|
||||||
pnpm run publish:linux
|
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|
||||||
- name: Build and Publish releases (Linux ARM64)
|
- name: Build and Publish releases (Linux ARM64)
|
||||||
@@ -196,18 +193,17 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:linux-arm64
|
pnpm run publish:linux-arm64:beta
|
||||||
pnpm run publish:linux-arm64
|
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|
||||||
rename-release:
|
edit-release:
|
||||||
needs: [prepare, publish]
|
needs: [prepare, publish]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout git repo
|
- name: Checkout git repo
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v1
|
||||||
|
|
||||||
- name: Rename release title to Beta
|
- name: Edit release with commits and title
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -215,19 +211,119 @@ jobs:
|
|||||||
# Get the version from the prepare job
|
# Get the version from the prepare job
|
||||||
$versionWithBeta = "${{ needs.prepare.outputs.version }}"
|
$versionWithBeta = "${{ needs.prepare.outputs.version }}"
|
||||||
$tagVersion = "v" + $versionWithBeta
|
$tagVersion = "v" + $versionWithBeta
|
||||||
Write-Host "Renaming release title for tag: $tagVersion"
|
Write-Host "Editing release for tag: $tagVersion"
|
||||||
|
|
||||||
# Check if release exists
|
# Check if release exists
|
||||||
$releaseExists = gh release view $tagVersion 2>$null
|
$releaseExists = gh release view $tagVersion 2>$null
|
||||||
if ($LASTEXITCODE -eq 0) {
|
if ($LASTEXITCODE -eq 0) {
|
||||||
Write-Host "Found release with tag $tagVersion, renaming title to 'Beta'..."
|
Write-Host "Found release with tag $tagVersion"
|
||||||
|
|
||||||
# Get current release notes
|
# Get current release notes
|
||||||
$releaseNotes = gh release view $tagVersion --json body --jq '.body'
|
|
||||||
|
|
||||||
# Update the release with new title
|
# Find the latest non-prerelease tag
|
||||||
|
Write-Host "Finding latest non-prerelease tag..."
|
||||||
|
$latestNonPrerelease = gh release list --limit 100 --json tagName,isPrerelease | ConvertFrom-Json | Where-Object { $_.isPrerelease -eq $false } | Select-Object -First 1
|
||||||
|
|
||||||
|
if ($latestNonPrerelease) {
|
||||||
|
$latestTag = $latestNonPrerelease.tagName
|
||||||
|
Write-Host "Latest non-prerelease tag: $latestTag"
|
||||||
|
|
||||||
|
# Get commits between latest non-prerelease and current HEAD
|
||||||
|
Write-Host "Getting commits between $latestTag and HEAD..."
|
||||||
|
|
||||||
|
# Use proper git range syntax and handle PowerShell string interpolation
|
||||||
|
$gitRange = "$latestTag..HEAD"
|
||||||
|
Write-Host "Git range: $gitRange"
|
||||||
|
|
||||||
|
# Get commits using proper git command with datetime
|
||||||
|
$commits = git log --oneline --pretty=format:"%ad|%s|%h" --date=short $gitRange
|
||||||
|
|
||||||
|
# Check if commits exist
|
||||||
|
if ($commits -and $commits.Trim() -ne "") {
|
||||||
|
Write-Host "Found commits:"
|
||||||
|
Write-Host $commits
|
||||||
|
|
||||||
|
# Group commits by date
|
||||||
|
$groupedCommits = @{}
|
||||||
|
foreach ($line in $commits) {
|
||||||
|
if ($line.Trim() -ne "") {
|
||||||
|
$parts = $line.Split('|')
|
||||||
|
$date = $parts[0]
|
||||||
|
$message = $parts[1]
|
||||||
|
$hash = $parts[2]
|
||||||
|
|
||||||
|
if (-not $groupedCommits.ContainsKey($date)) {
|
||||||
|
$groupedCommits[$date] = @()
|
||||||
|
}
|
||||||
|
$groupedCommits[$date] += "- $message ($hash)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build formatted release notes grouped by date
|
||||||
|
$commitNotes = "## Changes since $latestTag`n`n"
|
||||||
|
$sortedDates = $groupedCommits.Keys | Sort-Object -Descending
|
||||||
|
foreach ($date in $sortedDates) {
|
||||||
|
$commitNotes += "### $date`n"
|
||||||
|
foreach ($commit in $groupedCommits[$date]) {
|
||||||
|
$commitNotes += "$commit`n"
|
||||||
|
}
|
||||||
|
$commitNotes += "`n"
|
||||||
|
}
|
||||||
|
|
||||||
|
$releaseNotes = $commitNotes
|
||||||
|
} else {
|
||||||
|
Write-Host "No commits found between $latestTag and HEAD"
|
||||||
|
Write-Host "Trying alternative approach..."
|
||||||
|
|
||||||
|
# Alternative: get commits since the tag (not range) with datetime
|
||||||
|
$commits = git log --oneline --pretty=format:"%ad|%s|%h" --date=short $latestTag.. --not $latestTag
|
||||||
|
|
||||||
|
if ($commits -and $commits.Trim() -ne "") {
|
||||||
|
Write-Host "Found commits with alternative method:"
|
||||||
|
Write-Host $commits
|
||||||
|
|
||||||
|
# Group commits by date
|
||||||
|
$groupedCommits = @{}
|
||||||
|
foreach ($line in $commits) {
|
||||||
|
if ($line.Trim() -ne "") {
|
||||||
|
$parts = $line.Split('|')
|
||||||
|
$date = $parts[0]
|
||||||
|
$message = $parts[1]
|
||||||
|
$hash = $parts[2]
|
||||||
|
|
||||||
|
if (-not $groupedCommits.ContainsKey($date)) {
|
||||||
|
$groupedCommits[$date] = @()
|
||||||
|
}
|
||||||
|
$groupedCommits[$date] += "- $message ($hash)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build formatted release notes grouped by date
|
||||||
|
$commitNotes = "## Changes since $latestTag`n`n"
|
||||||
|
$sortedDates = $groupedCommits.Keys | Sort-Object -Descending
|
||||||
|
foreach ($date in $sortedDates) {
|
||||||
|
$commitNotes += "### $date`n"
|
||||||
|
foreach ($commit in $groupedCommits[$date]) {
|
||||||
|
$commitNotes += "$commit`n"
|
||||||
|
}
|
||||||
|
$commitNotes += "`n"
|
||||||
|
}
|
||||||
|
|
||||||
|
$releaseNotes = $commitNotes
|
||||||
|
} else {
|
||||||
|
Write-Host "Still no commits found, using basic release notes"
|
||||||
|
$releaseNotes = "## Beta Release`n`nThis is a beta release."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Host "No non-prerelease tags found, using basic release notes"
|
||||||
|
$releaseNotes = "## Beta Release`n`nThis is a beta release."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update the release with new title and notes
|
||||||
|
Write-Host "Updating release with title 'Beta' and new notes..."
|
||||||
gh release edit $tagVersion --title "Beta" --notes "$releaseNotes"
|
gh release edit $tagVersion --title "Beta" --notes "$releaseNotes"
|
||||||
Write-Host "Successfully renamed release title to 'Beta'"
|
Write-Host "Successfully updated release title to 'Beta' and added commit notes"
|
||||||
} else {
|
} else {
|
||||||
Write-Host "No release found with tag $tagVersion"
|
Write-Host "No release found with tag $tagVersion"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:linux
|
|
||||||
pnpm run publish:linux
|
pnpm run publish:linux
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|
||||||
@@ -44,6 +43,5 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:linux-arm64
|
|
||||||
pnpm run publish:linux-arm64
|
pnpm run publish:linux-arm64
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|||||||
@@ -31,6 +31,5 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:mac
|
|
||||||
pnpm run publish:mac
|
pnpm run publish:mac
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|||||||
@@ -31,6 +31,5 @@ jobs:
|
|||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
retry_on: error
|
retry_on: error
|
||||||
command: |
|
command: |
|
||||||
pnpm run package:win
|
|
||||||
pnpm run publish:win
|
pnpm run publish:win
|
||||||
on_retry_command: pnpm cache delete
|
on_retry_command: pnpm cache delete
|
||||||
|
|||||||
@@ -157,14 +157,18 @@ This project is built off of [electron-vite](https://github.com/alex8088/electro
|
|||||||
- `pnpm run build:remote` - Build the remote app (remote)
|
- `pnpm run build:remote` - Build the remote app (remote)
|
||||||
- `pnpm run build:web` - Build the standalone web app (renderer)
|
- `pnpm run build:web` - Build the standalone web app (renderer)
|
||||||
- `pnpm run package` - Package the project
|
- `pnpm run package` - Package the project
|
||||||
- `pnpm run package:dev` - Package the project for development
|
- `pnpm run package:dev` - Package the project for development locally
|
||||||
- `pnpm run package:linux` - Package the project for Linux
|
- `pnpm run package:linux` - Package the project for Linux locally
|
||||||
- `pnpm run package:mac` - Package the project for Mac
|
- `pnpm run package:mac` - Package the project for Mac locally
|
||||||
- `pnpm run package:win` - Package the project for Windows
|
- `pnpm run package:win` - Package the project for Windows locally
|
||||||
- `pnpm run publish:linux` - Publish the project for Linux
|
- `pnpm run publish:linux` - Publish the project for Linux
|
||||||
|
- `pnpm run publish:linux:beta` - Publish the project for Linux (beta channel)
|
||||||
- `pnpm run publish:linux-arm64` - Publish the project for Linux ARM64
|
- `pnpm run publish:linux-arm64` - Publish the project for Linux ARM64
|
||||||
|
- `pnpm run publish:linux-arm64:beta` - Publish the project for Linux ARM64 (beta channel)
|
||||||
- `pnpm run publish:mac` - Publish the project for Mac
|
- `pnpm run publish:mac` - Publish the project for Mac
|
||||||
|
- `pnpm run publish:mac:beta` - Publish the project for Mac (beta channel)
|
||||||
- `pnpm run publish:win` - Publish the project for Windows
|
- `pnpm run publish:win` - Publish the project for Windows
|
||||||
|
- `pnpm run publish:win:beta` - Publish the project for Windows (beta channel)
|
||||||
- `pnpm run typecheck` - Type check the project
|
- `pnpm run typecheck` - Type check the project
|
||||||
- `pnpm run typecheck:node` - Type check the project with tsconfig.node.json
|
- `pnpm run typecheck:node` - Type check the project with tsconfig.node.json
|
||||||
- `pnpm run typecheck:web` - Type check the project with tsconfig.web.json
|
- `pnpm run typecheck:web` - Type check the project with tsconfig.web.json
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
appId: org.jeffvli.feishin
|
||||||
|
productName: Feishin
|
||||||
|
artifactName: ${productName}-${version}-${os}-${arch}.${ext}
|
||||||
|
electronVersion: 35.1.5
|
||||||
|
directories:
|
||||||
|
buildResources: assets
|
||||||
|
files:
|
||||||
|
- 'out/**/*'
|
||||||
|
- 'package.json'
|
||||||
|
extraResources:
|
||||||
|
- assets/**
|
||||||
|
asarUnpack:
|
||||||
|
- resources/**
|
||||||
|
win:
|
||||||
|
target:
|
||||||
|
- zip
|
||||||
|
- nsis
|
||||||
|
icon: assets/icons/icon.png
|
||||||
|
|
||||||
|
nsis:
|
||||||
|
allowToChangeInstallationDirectory: true
|
||||||
|
oneClick: false
|
||||||
|
shortcutName: ${productName}
|
||||||
|
uninstallDisplayName: ${productName}
|
||||||
|
createDesktopShortcut: always
|
||||||
|
|
||||||
|
mac:
|
||||||
|
target:
|
||||||
|
target: default
|
||||||
|
arch:
|
||||||
|
- arm64
|
||||||
|
- x64
|
||||||
|
icon: assets/icons/icon.icns
|
||||||
|
type: distribution
|
||||||
|
hardenedRuntime: true
|
||||||
|
entitlements: assets/entitlements.mac.plist
|
||||||
|
entitlementsInherit: assets/entitlements.mac.plist
|
||||||
|
gatekeeperAssess: false
|
||||||
|
notarize: false
|
||||||
|
|
||||||
|
dmg:
|
||||||
|
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
||||||
|
|
||||||
|
linux:
|
||||||
|
target:
|
||||||
|
- AppImage
|
||||||
|
- tar.xz
|
||||||
|
category: AudioVideo;Audio;Player
|
||||||
|
icon: assets/icons/icon.png
|
||||||
|
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||||
|
|
||||||
|
npmRebuild: false
|
||||||
|
publish:
|
||||||
|
provider: github
|
||||||
|
owner: jeffvli
|
||||||
|
repo: feishin
|
||||||
|
channel: beta
|
||||||
@@ -16,12 +16,14 @@ win:
|
|||||||
- zip
|
- zip
|
||||||
- nsis
|
- nsis
|
||||||
icon: assets/icons/icon.png
|
icon: assets/icons/icon.png
|
||||||
|
|
||||||
nsis:
|
nsis:
|
||||||
allowToChangeInstallationDirectory: true
|
allowToChangeInstallationDirectory: true
|
||||||
oneClick: false
|
oneClick: false
|
||||||
shortcutName: ${productName}
|
shortcutName: ${productName}
|
||||||
uninstallDisplayName: ${productName}
|
uninstallDisplayName: ${productName}
|
||||||
createDesktopShortcut: always
|
createDesktopShortcut: always
|
||||||
|
|
||||||
mac:
|
mac:
|
||||||
target:
|
target:
|
||||||
target: default
|
target: default
|
||||||
@@ -35,8 +37,10 @@ mac:
|
|||||||
entitlementsInherit: assets/entitlements.mac.plist
|
entitlementsInherit: assets/entitlements.mac.plist
|
||||||
gatekeeperAssess: false
|
gatekeeperAssess: false
|
||||||
notarize: false
|
notarize: false
|
||||||
|
|
||||||
dmg:
|
dmg:
|
||||||
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
contents: [{ x: 130, y: 220 }, { x: 410, y: 220, type: link, path: /Applications }]
|
||||||
|
|
||||||
linux:
|
linux:
|
||||||
target:
|
target:
|
||||||
- AppImage
|
- AppImage
|
||||||
@@ -44,9 +48,10 @@ linux:
|
|||||||
category: AudioVideo;Audio;Player
|
category: AudioVideo;Audio;Player
|
||||||
icon: assets/icons/icon.png
|
icon: assets/icons/icon.png
|
||||||
artifactName: ${productName}-${os}-${arch}.${ext}
|
artifactName: ${productName}-${os}-${arch}.${ext}
|
||||||
|
|
||||||
npmRebuild: false
|
npmRebuild: false
|
||||||
publish:
|
publish:
|
||||||
provider: github
|
provider: github
|
||||||
owner: jeffvli
|
owner: jeffvli
|
||||||
repo: feishin
|
repo: feishin
|
||||||
generateUpdatesFilesForAllChannels: true
|
channel: latest
|
||||||
|
|||||||
+9
-5
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "feishin",
|
"name": "feishin",
|
||||||
"version": "0.20.1",
|
"version": "0.21.0",
|
||||||
"description": "A modern self-hosted music player.",
|
"description": "A modern self-hosted music player.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"subsonic",
|
"subsonic",
|
||||||
@@ -44,10 +44,14 @@
|
|||||||
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
|
"package:mac:pr": "pnpm run build && electron-builder --mac --publish never",
|
||||||
"package:win": "pnpm run build && electron-builder --win",
|
"package:win": "pnpm run build && electron-builder --win",
|
||||||
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
|
"package:win:pr": "pnpm run build && electron-builder --win --publish never",
|
||||||
"publish:linux": "electron-builder --publish always --linux",
|
"publish:linux": "pnpm run build && electron-builder --publish always --linux",
|
||||||
"publish:linux-arm64": "electron-builder --publish always --linux --arm64",
|
"publish:linux-arm64": "pnpm run build && electron-builder --publish always --linux --arm64",
|
||||||
"publish:mac": "electron-builder --publish always --mac",
|
"publish:linux-arm64:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux --arm64",
|
||||||
"publish:win": "electron-builder --publish always --win",
|
"publish:linux:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --linux",
|
||||||
|
"publish:mac": "pnpm run build && electron-builder --publish always --mac",
|
||||||
|
"publish:mac:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --mac",
|
||||||
|
"publish:win": "pnpm run build && electron-builder --publish always --win",
|
||||||
|
"publish:win:beta": "pnpm run build && electron-builder --config electron-builder-beta.yml --publish always --win",
|
||||||
"start": "electron-vite preview",
|
"start": "electron-vite preview",
|
||||||
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
|
"typecheck": "pnpm run typecheck:node && pnpm run typecheck:web",
|
||||||
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
||||||
|
|||||||
Reference in New Issue
Block a user