node build fixed
This commit is contained in:
2
seanime-2.9.10/.github/FUNDING.yml
vendored
Normal file
2
seanime-2.9.10/.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
github: 5rahim
|
||||
buy_me_a_coffee: 5rahim
|
||||
111
seanime-2.9.10/.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
111
seanime-2.9.10/.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
name: Bug report
|
||||
description: Report a bug you encountered
|
||||
title: 'bug: '
|
||||
labels:
|
||||
- bug
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: '1'
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: Please follow the general troubleshooting steps first
|
||||
options:
|
||||
- label: >-
|
||||
My version of the app is the latest available
|
||||
required: true
|
||||
- label: >-
|
||||
I have checked open and closed [issues](https://github.com/5rahim/seanime/issues)
|
||||
required: true
|
||||
- label: >-
|
||||
I have checked the [docs](https://seanime.rahim.app/docs/faq) for a fix
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: '2'
|
||||
attributes:
|
||||
label: Bug Severity
|
||||
description: Select the severity of the bug. Anything below "Panic" means the app doesn't crash.
|
||||
options:
|
||||
- Not sure
|
||||
- Panic / Crash
|
||||
- Usability is affected
|
||||
- Low
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: '3'
|
||||
attributes:
|
||||
label: Bug Area
|
||||
description: Select the general area of the app or process during which the bug occurred.
|
||||
options:
|
||||
- Other
|
||||
- Authentication
|
||||
- Configuration
|
||||
- Anime Library
|
||||
- Transcoding / Media Streaming
|
||||
- Torrent Streaming
|
||||
- Online Streaming
|
||||
- Manga
|
||||
- Settings
|
||||
- Offline mode
|
||||
- AniList
|
||||
- UI / Web Interface
|
||||
- Desktop app
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: '4'
|
||||
attributes:
|
||||
label: Bug Description / Steps to Reproduce
|
||||
description: Precisely describe the bug you encountered and the steps to reproduce it. Avoid vague descriptions.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: '5'
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: Describe what you expected to happen.
|
||||
- type: textarea
|
||||
id: '6'
|
||||
attributes:
|
||||
label: Screenshots
|
||||
description: If applicable, add screenshots of the bug
|
||||
- type: textarea
|
||||
id: '7'
|
||||
attributes:
|
||||
label: Logs
|
||||
description: If applicable, add terminal output, browser console logs or stack traces. You can use [pastebin](https://pastebin.com) to share large logs.
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: '8'
|
||||
attributes:
|
||||
label: Debugging Checklist
|
||||
description: Confirm you have included at least some of the following debugging information. If you haven't, please do so before submitting the issue.
|
||||
options:
|
||||
- label: >-
|
||||
I have included error messages
|
||||
required: false
|
||||
- label: >-
|
||||
I have included server logs
|
||||
required: false
|
||||
- label: >-
|
||||
I have included browser console logs
|
||||
required: false
|
||||
- type: input
|
||||
id: '9'
|
||||
attributes:
|
||||
label: App Version
|
||||
description: Enter the version of Seanime you are using.
|
||||
placeholder: v1.0.0
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: '10'
|
||||
attributes:
|
||||
label: Operating System
|
||||
options:
|
||||
- Windows
|
||||
- Linux
|
||||
- MacOS
|
||||
validations:
|
||||
required: true
|
||||
39
seanime-2.9.10/.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
39
seanime-2.9.10/.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: Feature Request
|
||||
description: Suggest an idea for the project
|
||||
title: 'feature request: '
|
||||
labels:
|
||||
- request
|
||||
body:
|
||||
- type: checkboxes
|
||||
id: '1'
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: >-
|
||||
Please check the following before submitting a feature request. If you
|
||||
are unable to check all the boxes, please provide more information in the
|
||||
description.
|
||||
options:
|
||||
- label: >-
|
||||
I checked that this feature has not been requested before
|
||||
required: true
|
||||
- label: >-
|
||||
I checked that this feature is not in the "Not planned" list
|
||||
required: true
|
||||
- label: >-
|
||||
This feature will benefit the majority of users
|
||||
- type: textarea
|
||||
id: '2'
|
||||
attributes:
|
||||
label: Problem Description / Use Case
|
||||
description: >-
|
||||
Provide a detailed description of the problem you are facing or the use case you have in mind.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: '3'
|
||||
attributes:
|
||||
label: Proposed Solution
|
||||
description: >-
|
||||
Provide a detailed description of the solution you'd like to see. If you have any ideas on how to implement the feature, please include them here.
|
||||
validations:
|
||||
required: true
|
||||
57
seanime-2.9.10/.github/scripts/generate_release_notes.go
vendored
Normal file
57
seanime-2.9.10/.github/scripts/generate_release_notes.go
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
const inFile = "CHANGELOG.md"
|
||||
const outFile = "whats-new.md"
|
||||
|
||||
// Get the path to the changelog
|
||||
changelogPath := filepath.Join(".", inFile)
|
||||
|
||||
// Read the changelog content
|
||||
content, err := os.ReadFile(changelogPath)
|
||||
if err != nil {
|
||||
fmt.Println("Error reading changelog:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Convert the content to a string
|
||||
changelog := string(content)
|
||||
|
||||
// Extract everything between the first and second "## " headers
|
||||
sections := strings.Split(changelog, "## ")
|
||||
if len(sections) < 2 {
|
||||
fmt.Println("Not enough headers found in the changelog.")
|
||||
return
|
||||
}
|
||||
|
||||
// We only care about the first section
|
||||
changelog = sections[1]
|
||||
|
||||
// Remove everything after the next header (if any)
|
||||
changelog = strings.Split(changelog, "## ")[0]
|
||||
|
||||
// Remove the first line (which is the title of the first section)
|
||||
lines := strings.Split(changelog, "\n")
|
||||
if len(lines) > 1 {
|
||||
changelog = strings.Join(lines[1:], "\n")
|
||||
}
|
||||
|
||||
// Trim newlines
|
||||
changelog = strings.TrimSpace(changelog)
|
||||
|
||||
// Write the extracted content to the output file
|
||||
outPath := filepath.Join(".", outFile)
|
||||
if err := os.WriteFile(outPath, []byte(changelog), 0644); err != nil {
|
||||
fmt.Println("Error writing to file:", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("Changelog content written to %s\n", outPath)
|
||||
}
|
||||
107
seanime-2.9.10/.github/scripts/generate_updater_latest.go
vendored
Normal file
107
seanime-2.9.10/.github/scripts/generate_updater_latest.go
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
DownloadUrl = "https://github.com/5rahim/seanime/releases/latest/download/"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Retrieve version from environment variable
|
||||
version := os.Getenv("APP_VERSION")
|
||||
if version == "" {
|
||||
version = "1.0.0" // Default to '1.0.0' if not set
|
||||
}
|
||||
|
||||
// Define the asset filenames
|
||||
assets := map[string]struct {
|
||||
Asset string
|
||||
AppZip string
|
||||
Sig string
|
||||
}{
|
||||
"MacOS_arm64": {
|
||||
Asset: fmt.Sprintf("seanime-desktop-%s_MacOS_arm64.app.tar.gz", version),
|
||||
Sig: fmt.Sprintf("seanime-desktop-%s_MacOS_arm64.app.tar.gz.sig", version),
|
||||
},
|
||||
"MacOS_x86_64": {
|
||||
Asset: fmt.Sprintf("seanime-desktop-%s_MacOS_x86_64.app.tar.gz", version),
|
||||
Sig: fmt.Sprintf("seanime-desktop-%s_MacOS_x86_64.app.tar.gz.sig", version),
|
||||
},
|
||||
"Linux_x86_64": {
|
||||
Asset: fmt.Sprintf("seanime-desktop-%s_Linux_x86_64.AppImage", version),
|
||||
Sig: fmt.Sprintf("seanime-desktop-%s_Linux_x86_64.AppImage.sig", version),
|
||||
},
|
||||
"Windows_x86_64": {
|
||||
AppZip: fmt.Sprintf("seanime-desktop-%s_Windows_x86_64.exe", version),
|
||||
Sig: fmt.Sprintf("seanime-desktop-%s_Windows_x86_64.sig", version),
|
||||
},
|
||||
}
|
||||
|
||||
// Function to generate URL based on asset names
|
||||
generateURL := func(filename string) string {
|
||||
return fmt.Sprintf("%s%s", DownloadUrl, filename)
|
||||
}
|
||||
|
||||
// Prepare the JSON structure
|
||||
latestJSON := map[string]interface{}{
|
||||
"version": version,
|
||||
"pub_date": time.Now().Format(time.RFC3339), // Change to the actual publish date
|
||||
"platforms": map[string]map[string]string{
|
||||
"linux-x86_64": {
|
||||
"url": generateURL(assets["Linux_x86_64"].Asset),
|
||||
"signature": getContent(assets["Linux_x86_64"].Sig),
|
||||
},
|
||||
"windows-x86_64": {
|
||||
"url": generateURL(assets["Windows_x86_64"].AppZip),
|
||||
"signature": getContent(assets["Windows_x86_64"].Sig),
|
||||
},
|
||||
"darwin-x86_64": {
|
||||
"url": generateURL(assets["MacOS_x86_64"].Asset),
|
||||
"signature": getContent(assets["MacOS_x86_64"].Sig),
|
||||
},
|
||||
"darwin-aarch64": {
|
||||
"url": generateURL(assets["MacOS_arm64"].Asset),
|
||||
"signature": getContent(assets["MacOS_arm64"].Sig),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// Remove non-existent assets
|
||||
for platform, asset := range latestJSON["platforms"].(map[string]map[string]string) {
|
||||
if asset["signature"] == "" {
|
||||
delete(latestJSON["platforms"].(map[string]map[string]string), platform)
|
||||
}
|
||||
}
|
||||
|
||||
// Write to latest.json
|
||||
outputPath := filepath.Join(".", "latest.json")
|
||||
file, err := os.Create(outputPath)
|
||||
if err != nil {
|
||||
fmt.Println("Error creating file:", err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
encoder := json.NewEncoder(file)
|
||||
encoder.SetIndent("", " ")
|
||||
if err := encoder.Encode(latestJSON); err != nil {
|
||||
fmt.Println("Error writing JSON to file:", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("Generated %s successfully.\n", outputPath)
|
||||
}
|
||||
|
||||
func getContent(filename string) string {
|
||||
fileContent, err := os.ReadFile(filepath.Join(".", filename))
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(fileContent)
|
||||
}
|
||||
151
seanime-2.9.10/.github/workflows/electron-build.yml.new
vendored
Normal file
151
seanime-2.9.10/.github/workflows/electron-build.yml.new
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
name: Build Electron App
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
outputs:
|
||||
appVersion:
|
||||
description: "The version of the app"
|
||||
value: ${{ jobs.build-electron.outputs.app_version }}
|
||||
|
||||
jobs:
|
||||
build-electron:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# IDs:
|
||||
# - seanime-denshi-darwin-arm
|
||||
# - seanime-denshi-darwin-intel
|
||||
# - seanime-denshi-linux
|
||||
# - seanime-denshi-windows
|
||||
include:
|
||||
# For Mac Universal
|
||||
- os: 'macos-latest'
|
||||
id: 'seanime-denshi-darwin-arm64'
|
||||
go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64)
|
||||
electron_args: '--mac --arm64'
|
||||
# For Intel-based macs
|
||||
- os: 'macos-latest'
|
||||
id: 'seanime-denshi-darwin-x64'
|
||||
go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64)
|
||||
electron_args: '--mac --x64'
|
||||
# For Linux
|
||||
- os: 'ubuntu-latest'
|
||||
id: 'seanime-denshi-linux-x64'
|
||||
go_binary_id: 'seanime-server-linux' # Artifact: go-seanime-server-linux (contains x86_64)
|
||||
electron_args: '--linux'
|
||||
# For Windows
|
||||
- os: 'windows-latest'
|
||||
id: 'seanime-denshi-windows-x64'
|
||||
go_binary_id: 'seanime-server-windows' # Artifact: go-seanime-server-windows (contains x86_64)
|
||||
electron_args: '--win'
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
outputs:
|
||||
app_version: ${{ steps.get-version.outputs.version }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code 📂
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Node.js 📦
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
- name: Get package version 📦
|
||||
id: get-version
|
||||
run: |
|
||||
NODE_VERSION=$(node -p "require('./seanime-denshi/package.json').version")
|
||||
echo "version=$NODE_VERSION" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
|
||||
# Install dependencies
|
||||
- name: Install dependencies (Ubuntu) 📦
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libgtk-3-dev libnss3-dev libxss-dev libasound2-dev
|
||||
|
||||
# Download the web folders
|
||||
- name: Download web folder artifact 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: web-denshi
|
||||
path: web-denshi
|
||||
|
||||
# Move web-denshi folder into seanime-denshi
|
||||
- name: Move web-denshi folder 🚚
|
||||
run: mv web-denshi seanime-denshi/
|
||||
shell: bash
|
||||
|
||||
- name: Ensure binaries folder exists (UNIX)
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
|
||||
run: mkdir -p ./seanime-denshi/binaries
|
||||
|
||||
- name: Ensure binaries folder exists (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: mkdir .\seanime-denshi\binaries
|
||||
|
||||
# Download the server binaries based on matrix.go_binary_id
|
||||
- name: Download server binaries 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: go-${{ matrix.go_binary_id }}
|
||||
path: ./seanime-denshi/binaries
|
||||
|
||||
# Extract server binaries
|
||||
- name: Extract server binaries (macOS x64) 📂
|
||||
if: matrix.os == 'macos-latest' && matrix.id == 'seanime-denshi-darwin-x64'
|
||||
# Extracts seanime-server-darwin-arm64 and seanime-server-darwin-amd64
|
||||
# Only keep seanime-server-darwin-amd64
|
||||
run: |
|
||||
tar -xf ./seanime-denshi/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-denshi/binaries
|
||||
# Remove the other binary
|
||||
rm -rf ./seanime-denshi/binaries/seanime-server-darwin-arm64
|
||||
|
||||
- name: Extract server binaries (macOS arm64) 📂
|
||||
if: matrix.os == 'macos-latest' && matrix.id == 'seanime-denshi-darwin-arm64'
|
||||
# Extracts seanime-server-darwin-arm64 and seanime-server-darwin-amd64
|
||||
# Only keep seanime-server-darwin-arm64
|
||||
run: |
|
||||
tar -xf ./seanime-denshi/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-denshi/binaries
|
||||
# Remove the other binary
|
||||
rm -rf ./seanime-denshi/binaries/seanime-server-darwin-amd64
|
||||
|
||||
- name: Extract server binaries (Linux) 📂
|
||||
if: matrix.os == 'ubuntu-latest' && matrix.id == 'seanime-denshi-linux-x64'
|
||||
# Extracts seanime-server-linux-amd64
|
||||
run: tar -xf ./seanime-denshi/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-denshi/binaries
|
||||
|
||||
- name: Extract server binaries (Windows) 📂
|
||||
if: matrix.os == 'windows-latest'
|
||||
# Extracts seanime-server-windows-amd64
|
||||
run: 7z x ".\seanime-denshi\binaries\binaries-${{ matrix.go_binary_id }}.zip" "-o./seanime-denshi/binaries/"
|
||||
|
||||
# Copy app icon
|
||||
- name: Copy app icon 📝
|
||||
run: |
|
||||
mkdir -p ./seanime-denshi/assets
|
||||
cp ./seanime-desktop/src-tauri/app-icon.png ./seanime-denshi/assets/
|
||||
shell: bash
|
||||
|
||||
# Install and build
|
||||
- name: Install and build 📦️
|
||||
run: |
|
||||
cd seanime-denshi
|
||||
npm install
|
||||
npm run build -- ${{ matrix.electron_args }}
|
||||
shell: bash
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Upload the artifacts
|
||||
- name: Upload Electron artifacts 📤
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: electron-${{ matrix.id }}
|
||||
path: |
|
||||
./seanime-denshi-*
|
||||
./seanime-denshi/dist/*.yml
|
||||
700
seanime-2.9.10/.github/workflows/release-draft-new.yml.new
vendored
Normal file
700
seanime-2.9.10/.github/workflows/release-draft-new.yml.new
vendored
Normal file
@@ -0,0 +1,700 @@
|
||||
name: Release Draft
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
|
||||
build-webapp: # TODO Uncomment if building web
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# Web
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
# outputs in "seanime-web/out/" and "seanime-web/out-desktop/"
|
||||
- name: Install dependencies and build Next.js app
|
||||
run: |
|
||||
cd seanime-web/
|
||||
npm install
|
||||
npm run build
|
||||
npm run build:desktop
|
||||
npm run build:denshi
|
||||
cd ..
|
||||
# Upload the output to be used in the next job
|
||||
- name: Upload web folder
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web
|
||||
path: seanime-web/out # output dir of build
|
||||
- name: Upload web folder (Tauri)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web-desktop
|
||||
path: seanime-web/out-desktop # output dir of build:desktop
|
||||
- name: Upload web folder (Electron)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web-denshi
|
||||
path: seanime-web/out-denshi # output dir of build:denshi
|
||||
|
||||
build-server:
|
||||
needs: build-webapp # TODO Uncomment if building web
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
# 6 binaries: 2 for Windows, 2 for Linux, 2 for macOS
|
||||
include:
|
||||
# This is the systray version of the Windows binary used for the server build
|
||||
- os: macos-latest # seanime-server-systray-windows.exe
|
||||
id: seanime-server-systray-windows
|
||||
go_flags: -trimpath -buildmode=exe -ldflags="-s -w -H=windowsgui -extldflags '-static'"
|
||||
|
||||
# This is the non-systray version of the Windows binary used for the Tauri Windows build
|
||||
- os: windows-latest # seanime-server-windows.exe
|
||||
id: seanime-server-windows
|
||||
go_flags: -trimpath -ldflags="-s -w" -tags=nosystray
|
||||
|
||||
# These are the Linux binaries used for the server build and the Tauri Linux build
|
||||
- os: ubuntu-latest # seanime-server-linux-arm64, seanime-server-linux-amd64
|
||||
id: seanime-server-linux
|
||||
go_flags: -trimpath -ldflags="-s -w"
|
||||
|
||||
# These are the macOS binaries used for the server build and the Tauri macOS build
|
||||
- os: macos-latest # seanime-server-darwin-arm64, seanime-server-darwin-amd64
|
||||
id: seanime-server-darwin
|
||||
go_env: CGO_ENABLED=0
|
||||
go_flags: -trimpath -ldflags="-s -w"
|
||||
steps:
|
||||
- name: Checkout code ⬇️
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Fetch all history
|
||||
fetch-tags: true # Fetch all tags
|
||||
set-safe-directory: true # Add repo path as safe.directory
|
||||
|
||||
- name: Fetch all tags # Fetch all tags (again? can't hurt)
|
||||
run: git fetch --force --tags
|
||||
|
||||
# Go
|
||||
- name: Set up Go ⬇️
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.24.3'
|
||||
|
||||
# Download the web folders
|
||||
# TODO Uncomment if building web
|
||||
- name: Download web folder artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: web
|
||||
path: web
|
||||
|
||||
# Create the binary destination folder
|
||||
# ./binaries
|
||||
# |--- ...
|
||||
- name: Create binary destination folder (UNIX) 🗃️
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
|
||||
run: mkdir -p binaries
|
||||
- name: Create binary destination folder (Windows) 🗃️
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: mkdir -p binaries
|
||||
shell: bash
|
||||
|
||||
|
||||
#---
|
||||
|
||||
# ONLY for Windows systray build (seanime-server-systray-windows)
|
||||
# For the Windows systray build (built on macOS runner), we need to install the necessary dependencies
|
||||
- name: Install C dependencies ⬇️ # macos windows systray build
|
||||
if: matrix.id == 'seanime-server-systray-windows'
|
||||
run: |
|
||||
brew install filosottile/musl-cross/musl-cross
|
||||
brew install llvm
|
||||
brew install mingw-w64
|
||||
|
||||
# Build the Windows systray binary
|
||||
# ./binaries/seanime-server-systray-windows.exe
|
||||
- name: Build Windows Systray 📦️
|
||||
if: matrix.id == 'seanime-server-systray-windows'
|
||||
env:
|
||||
GOARCH: amd64
|
||||
GOOS: windows
|
||||
CGO_ENABLED: 1
|
||||
CC: x86_64-w64-mingw32-gcc
|
||||
CXX: x86_64-w64-mingw32-g++
|
||||
run: |
|
||||
go build -o seanime-server-systray-windows.exe ${{ matrix.go_flags }} .
|
||||
|
||||
# Build the Windows non-systray binary
|
||||
# ./seanime-server-windows.exe
|
||||
- name: Build Windows Non-Systray 📦️
|
||||
if: matrix.id == 'seanime-server-windows'
|
||||
env:
|
||||
GOARCH: amd64
|
||||
GOOS: windows
|
||||
CGO_ENABLED: 0
|
||||
run: |
|
||||
go build -o seanime-server-windows.exe ${{ matrix.go_flags }} .
|
||||
shell: bash
|
||||
|
||||
# Build the Linux binaries
|
||||
# ./seanime-server-linux-amd64
|
||||
# ./seanime-server-linux-arm64
|
||||
- name: Build Linux 📦️
|
||||
if: matrix.id == 'seanime-server-linux'
|
||||
run: |
|
||||
CGO_ENABLED=0 GOARCH=amd64 go build -o seanime-server-linux-amd64 ${{ matrix.go_flags }} .
|
||||
CGO_ENABLED=0 GOARCH=arm64 go build -o seanime-server-linux-arm64 ${{ matrix.go_flags }} .
|
||||
|
||||
# Build the macOS binaries
|
||||
# ./seanime-server-darwin-amd64
|
||||
# ./seanime-server-darwin-arm64
|
||||
- name: Build macOS 📦️
|
||||
if: matrix.id == 'seanime-server-darwin'
|
||||
run: |
|
||||
CGO_ENABLED=0 GOARCH=amd64 go build -o seanime-server-darwin-amd64 ${{ matrix.go_flags }} .
|
||||
CGO_ENABLED=0 GOARCH=arm64 go build -o seanime-server-darwin-arm64 ${{ matrix.go_flags }} .
|
||||
|
||||
# Tar the binaries
|
||||
- name: Tar the binaries (UNIX) 🗃️
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
|
||||
# binaries-seanime-server-darwin.tar
|
||||
# binaries-seanime-server-linux.tar
|
||||
# binaries-seanime-server-systray-windows.tar
|
||||
run: |
|
||||
tar -cf binaries-${{ matrix.id }}.tar seanime-server-*
|
||||
|
||||
# Zip the binaries
|
||||
- name: Zip the binaries (Windows) 🗃️
|
||||
if: matrix.os == 'windows-latest'
|
||||
# binaries-seanime-server-windows.zip
|
||||
run: |
|
||||
7z a "binaries-${{ matrix.id }}.zip" seanime-server-*
|
||||
|
||||
# Upload the binaries to be used in the next job
|
||||
- name: Upload binary folder (UNIX) 📤
|
||||
uses: actions/upload-artifact@v4
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
|
||||
with:
|
||||
# go-seanime-server-linux
|
||||
# go-seanime-server-darwin
|
||||
# go-seanime-server-systray-windows
|
||||
name: go-${{ matrix.id }}
|
||||
path: binaries-${{ matrix.id }}.tar
|
||||
|
||||
- name: Upload binary folder (Windows) 📤
|
||||
uses: actions/upload-artifact@v4
|
||||
if: matrix.os == 'windows-latest'
|
||||
with:
|
||||
# go-seanime-server-windows
|
||||
name: go-${{ matrix.id }}
|
||||
path: binaries-${{ matrix.id }}.zip
|
||||
|
||||
|
||||
build-tauri:
|
||||
needs: build-server
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# IDs:
|
||||
# - seanime-desktop-darwin-arm
|
||||
# - seanime-desktop-darwin-intel
|
||||
# - seanime-desktop-linux
|
||||
# - seanime-desktop-windows
|
||||
include:
|
||||
# For Arm-based macs (M1 and above).
|
||||
- os: 'macos-latest'
|
||||
id: 'seanime-desktop-darwin-arm'
|
||||
go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64)
|
||||
args: '--target aarch64-apple-darwin'
|
||||
# For Intel-based macs.
|
||||
- os: 'macos-latest'
|
||||
id: 'seanime-desktop-darwin-intel'
|
||||
go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64)
|
||||
args: '--target x86_64-apple-darwin'
|
||||
# For Linux
|
||||
- os: 'ubuntu-22.04' # for Linux
|
||||
id: 'seanime-desktop-linux' # Artifact: go-seanime-server-linux (contains both arm64 and x86_64)
|
||||
go_binary_id: 'seanime-server-linux'
|
||||
args: ''
|
||||
# For Windows
|
||||
- os: 'windows-latest' # for Windows
|
||||
id: 'seanime-desktop-windows' # Artifact: go-seanime-server-windows (contains x86_64)
|
||||
go_binary_id: 'seanime-server-windows'
|
||||
args: ''
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies (Ubuntu) ⬇️
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
|
||||
|
||||
- name: Install Rust stable ⬇️
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
# Those targets are only used on macOS runners so it's in an `if` to slightly speed up windows and linux builds.
|
||||
targets: ${{ matrix.id == 'seanime-desktop-darwin-intel' && 'x86_64-apple-darwin' || matrix.id == 'seanime-desktop-darwin-arm' && 'aarch64-apple-darwin' || '' }}
|
||||
|
||||
- name: Setup node ⬇️
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
- name: Install Tauri CLI ⬇️
|
||||
run: |
|
||||
cd seanime-desktop
|
||||
npm install
|
||||
|
||||
- name: Rust cache ⬇️
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: './seanime-desktop/src-tauri -> target'
|
||||
|
||||
|
||||
# Download the web folder
|
||||
# TODO Uncomment if building web
|
||||
- name: Download web folder artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: web-desktop
|
||||
path: web-desktop
|
||||
|
||||
# Download the server binaries depending on matrix.go_binary_id
|
||||
- name: Download server binaries 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
# go-seanime-server-windows or
|
||||
# go-seanime-server-linux or
|
||||
# go-seanime-server-darwin
|
||||
name: go-${{ matrix.go_binary_id }}
|
||||
path: ./seanime-desktop/src-tauri/binaries
|
||||
|
||||
- name: Extract server binaries (UNIX) 📂
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: tar -xf ./seanime-desktop/src-tauri/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-desktop/src-tauri/binaries
|
||||
- name: Extract server binaries (Windows) 📂
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: 7z x ".\seanime-desktop\src-tauri\binaries\binaries-${{ matrix.go_binary_id }}.zip" "-o./seanime-desktop/src-tauri/binaries/"
|
||||
|
||||
|
||||
# ----------------------------------------------------------------- delete
|
||||
- name: Print downloaded binaries (UNIX)
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: ls -la ./seanime-desktop/src-tauri/binaries
|
||||
- name: Print downloaded binaries (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dir ./seanime-desktop/src-tauri/binaries
|
||||
# ----------------------------------------------------------------- delete
|
||||
|
||||
- name: Determine target triple (UNIX) 🎯
|
||||
# id: target_triple
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
TARGET_TRIPLE=$(rustc -Vv | grep host | cut -f2 -d' ')
|
||||
echo "TARGET_TRIPLE=${TARGET_TRIPLE}" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine target triple (Windows) 🎯
|
||||
# id: target_triple
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
$TARGET_TRIPLE = rustc -Vv | Select-String "host:" | ForEach-Object {$_.Line.split(" ")[1]}
|
||||
echo "TARGET_TRIPLE=$TARGET_TRIPLE" >> $env:GITHUB_ENV
|
||||
shell: pwsh
|
||||
|
||||
# seanime-server-windows.exe -> seanime-x86_64-pc-windows-msvc.exe
|
||||
- name: Rename sidecar binary (Windows) 📝
|
||||
if: matrix.id == 'seanime-desktop-windows'
|
||||
run: |
|
||||
powershell -Command "Rename-Item -Path ./seanime-desktop/src-tauri/binaries/seanime-server-windows.exe -NewName seanime-${{ env.TARGET_TRIPLE }}.exe"
|
||||
|
||||
# seanime-server-linux-amd64 -> seanime-unknown-linux-musl
|
||||
- name: Rename sidecar binaries (Linux) 📝
|
||||
if: matrix.id == 'seanime-desktop-linux'
|
||||
run: |
|
||||
mv ./seanime-desktop/src-tauri/binaries/seanime-server-linux-amd64 ./seanime-desktop/src-tauri/binaries/seanime-${{ env.TARGET_TRIPLE }}
|
||||
|
||||
# seanime-server-darwin-amd64 -> seanime-x86_64-apple-darwin
|
||||
- name: Rename sidecar binaries (MacOS Intel) 📝
|
||||
if: matrix.id == 'seanime-desktop-darwin-intel'
|
||||
# Here we hardcode the target triple because the macOS runner is ARM based
|
||||
run: |
|
||||
mv ./seanime-desktop/src-tauri/binaries/seanime-server-darwin-amd64 ./seanime-desktop/src-tauri/binaries/seanime-x86_64-apple-darwin
|
||||
|
||||
# seanime-server-darwin-arm64 -> seanime-aarch64-apple-darwin
|
||||
- name: Rename sidecar binaries (MacOS Arm) 📝
|
||||
if: matrix.id == 'seanime-desktop-darwin-arm'
|
||||
run: |
|
||||
mv ./seanime-desktop/src-tauri/binaries/seanime-server-darwin-arm64 ./seanime-desktop/src-tauri/binaries/seanime-${{ env.TARGET_TRIPLE }}
|
||||
|
||||
# ----------------------------------------------------------------- delete
|
||||
- name: Print downloaded binaries
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: ls -la ./seanime-desktop/src-tauri/binaries
|
||||
- name: Print downloaded binaries
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dir ./seanime-desktop/src-tauri/binaries
|
||||
# ----------------------------------------------------------------- delete
|
||||
|
||||
# Build Tauri
|
||||
- name: Run Tauri action 🚀
|
||||
id: tauri-action
|
||||
uses: tauri-apps/tauri-action@v0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
# APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
||||
# APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
||||
# APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
||||
# APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
# APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
||||
# APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
with:
|
||||
projectPath: './seanime-desktop'
|
||||
args: ${{ matrix.args }}
|
||||
updaterJsonPreferNsis: true
|
||||
|
||||
- name: Rename Tauri artifacts (UNIX) 📝
|
||||
# ./
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz.sig <- Signature
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz.sig <- Signature
|
||||
# |- seanime-desktop-linux.AppImage <- UNCOMPRESSED
|
||||
# |- seanime-desktop-linux.AppImage.sig <- Signature UNCOMPRESSED
|
||||
# |- seanime-desktop-windows-setup.exe <- UNCOMPRESSED
|
||||
# |- seanime-desktop-windows-setup.exe.sig <- Signature UNCOMPRESSED
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
# We hardcode the macOS target triple because the macOS runner is ARM based and builds both arm64 and x86_64
|
||||
run: |
|
||||
if [ -f ./seanime-desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ]; then
|
||||
mv ./seanime-desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ./seanime-desktop-darwin-arm.app.tar.gz
|
||||
mv ./seanime-desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz.sig ./seanime-desktop-darwin-arm.app.tar.gz.sig
|
||||
|
||||
elif [ -f ./seanime-desktop/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ]; then
|
||||
mv ./seanime-desktop/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ./seanime-desktop-darwin-intel.app.tar.gz
|
||||
mv ./seanime-desktop/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz.sig ./seanime-desktop-darwin-intel.app.tar.gz.sig
|
||||
|
||||
elif [ -f ./seanime-desktop/src-tauri/target/release/bundle/appimage/Seanime\ Desktop_${{ steps.tauri-action.outputs.appVersion }}_amd64.AppImage ]; then
|
||||
mv ./seanime-desktop/src-tauri/target/release/bundle/appimage/Seanime\ Desktop_${{ steps.tauri-action.outputs.appVersion }}_amd64.AppImage ./seanime-desktop-linux.AppImage
|
||||
mv ./seanime-desktop/src-tauri/target/release/bundle/appimage/Seanime\ Desktop_${{ steps.tauri-action.outputs.appVersion }}_amd64.AppImage.sig ./seanime-desktop-linux.AppImage.sig
|
||||
fi
|
||||
|
||||
- name: Rename Tauri artifacts (Windows) 📝
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
powershell -Command "Move-Item -Path './seanime-desktop/src-tauri/target/release/bundle/nsis/Seanime Desktop_${{ steps.tauri-action.outputs.appVersion }}_x64-setup.exe' -Destination './seanime-desktop-windows-setup.exe'"
|
||||
powershell -Command "Move-Item -Path './seanime-desktop/src-tauri/target/release/bundle/nsis/Seanime Desktop_${{ steps.tauri-action.outputs.appVersion }}_x64-setup.exe.sig' -Destination './seanime-desktop-windows-setup.exe.sig'"
|
||||
|
||||
- name: Tar the Tauri artifacts (Linux) 🗃️
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
# Note: The macOS artifacts are already packaged, so we don't need to compress them
|
||||
# Compress the Linux AppImage, not the signature
|
||||
run: |
|
||||
if [ -f ./seanime-desktop-linux.AppImage ]; then
|
||||
tar -czf seanime-desktop-linux.AppImage.tar.gz seanime-desktop-linux.AppImage
|
||||
fi
|
||||
- name: Zip the Tauri artifacts (Windows) 🗃️
|
||||
if: matrix.os == 'windows-latest'
|
||||
# Compress the Windows setup, not the signature
|
||||
run: |
|
||||
7z a seanime-desktop-windows-setup.exe.zip seanime-desktop-windows-setup.exe
|
||||
|
||||
# ----------------------------------------------------------------- delete
|
||||
- name: Print all
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: ls -la .
|
||||
- name: Print downloaded binaries
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dir .
|
||||
# ----------------------------------------------------------------- delete
|
||||
|
||||
# Upload the Tauri artifacts to be used in the next job
|
||||
- name: Upload tauri artifacts 📤
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Artifact IDs:
|
||||
# tauri-seanime-server-darwin-arm
|
||||
# tauri-seanime-server-darwin-intel
|
||||
# tauri-seanime-server-linux
|
||||
# tauri-seanime-server-windows
|
||||
name: tauri-${{ matrix.id }}
|
||||
path: |
|
||||
./seanime-desktop-darwin-arm.app.tar.gz
|
||||
./seanime-desktop-darwin-arm.app.tar.gz.sig
|
||||
./seanime-desktop-darwin-intel.app.tar.gz
|
||||
./seanime-desktop-darwin-intel.app.tar.gz.sig
|
||||
./seanime-desktop-linux.AppImage
|
||||
./seanime-desktop-linux.AppImage.tar.gz
|
||||
./seanime-desktop-linux.AppImage.sig
|
||||
./seanime-desktop-windows-setup.exe
|
||||
./seanime-desktop-windows-setup.exe.zip
|
||||
./seanime-desktop-windows-setup.exe.sig
|
||||
|
||||
|
||||
build-electron:
|
||||
needs: build-server
|
||||
uses: electron-build.yml.new
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ build-server, build-tauri, build-electron ]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download tauri artifacts 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: tauri-*
|
||||
path: ./artifacts
|
||||
merge-multiple: true
|
||||
|
||||
- name: Download electron artifacts 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: electron-*
|
||||
path: ./artifacts
|
||||
merge-multiple: true
|
||||
|
||||
- name: Determine version from tag name 🔎
|
||||
run: |
|
||||
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
|
||||
VERSION=${GITHUB_REF/refs\/tags\/v/}
|
||||
echo "Version extracted from tag: $VERSION"
|
||||
elif [[ "$GITHUB_REF" == refs/tags/* ]]; then
|
||||
VERSION=${GITHUB_REF/refs\/tags\//}
|
||||
echo "Version extracted from tag: $VERSION"
|
||||
else
|
||||
echo "Warning: No tag associated with this run. Defaulting to version 0.1.0."
|
||||
VERSION="0.1.0"
|
||||
fi
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
|
||||
- name: Print version
|
||||
run: echo "Version is ${{ env.VERSION }}"
|
||||
|
||||
- name: Download server binaries 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: go-*
|
||||
path: ./artifacts
|
||||
# ./artifacts
|
||||
# |- binaries-seanime-server-darwin.tar (contains 2)
|
||||
# |- binaries-seanime-server-linux.tar (contains 2)
|
||||
# |- binaries-seanime-server-systray-windows.tar (contains 1)
|
||||
merge-multiple: true
|
||||
|
||||
- name: Print all artifacts
|
||||
run: ls -la ./artifacts
|
||||
|
||||
- name: Extract - Rename - Archive server binaries 📂
|
||||
# ./artifacts
|
||||
# |- ...
|
||||
# \/ /binaries-seanime-server-darwin.tar
|
||||
# |- seanime-server-darwin-amd64 -> ../seanime -> ../seanime-${{ env.VERSION }}_MacOS_arm64.tar.gz
|
||||
# |- seanime-server-darwin-arm64 -> ../seanime -> ../seanime-${{ env.VERSION }}_MacOS_x86_64.tar.gz
|
||||
# \/ /binaries-seanime-server-darwin.tar
|
||||
# |- seanime-server-linux-amd64 -> ../seanime -> ../seanime-${{ env.VERSION }}_Linux_x86_64.tar.gz
|
||||
# |- seanime-server-linux-arm64 -> ../seanime -> ../seanime-${{ env.VERSION }}_Linux_arm64.tar.gz
|
||||
# \/ /binaries-seanime-server-systray-windows.tar
|
||||
# |- seanime-server-systray-windows.exe -> ../seanime.exe -> ../seanime-${{ env.VERSION }}_Windows_x86_64.zip
|
||||
run: |
|
||||
if [ -f ./artifacts/binaries-seanime-server-darwin.tar ]; then
|
||||
# Extract binaries
|
||||
tar -xf ./artifacts/binaries-seanime-server-darwin.tar -C ./artifacts
|
||||
|
||||
# Rename & compress binaries
|
||||
mv ./artifacts/seanime-server-darwin-amd64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_MacOS_x86_64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
|
||||
|
||||
mv ./artifacts/seanime-server-darwin-arm64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_MacOS_arm64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
fi
|
||||
|
||||
if [ -f ./artifacts/binaries-seanime-server-linux.tar ]; then
|
||||
# Extract binaries
|
||||
tar -xf ./artifacts/binaries-seanime-server-linux.tar -C ./artifacts
|
||||
|
||||
# Rename & compress binaries
|
||||
mv ./artifacts/seanime-server-linux-amd64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_Linux_x86_64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
|
||||
|
||||
mv ./artifacts/seanime-server-linux-arm64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_Linux_arm64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
fi
|
||||
|
||||
if [ -f ./artifacts/binaries-seanime-server-systray-windows.tar ]; then
|
||||
# Extract binaries
|
||||
tar -xf ./artifacts/binaries-seanime-server-systray-windows.tar -C ./artifacts
|
||||
|
||||
# Rename & compress binaries
|
||||
mv ./artifacts/seanime-server-systray-windows.exe ./seanime.exe
|
||||
7z a ./seanime-${{ env.VERSION }}_Windows_x86_64.zip ./seanime.exe
|
||||
rm -rf ./seanime.exe
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: Print all artifacts
|
||||
run: ls -la ./artifacts
|
||||
|
||||
- name: Move & Rename Tauri assets 📝🗃️
|
||||
# Move Tauri assets to the root directory and rename them
|
||||
# ./artifacts
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz -> ../seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz.sig -> ../seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz.sig
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz -> ../seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz.sig -> ../seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz.sig
|
||||
# |- seanime-desktop-linux.AppImage -> ../seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage
|
||||
# |- seanime-desktop-linux.AppImage.tar.gz -> ../seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.tar.gz
|
||||
# |- seanime-desktop-linux.AppImage.sig -> ../seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.sig
|
||||
# |- seanime-desktop-windows-setup.exe -> ../seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe
|
||||
# |- seanime-desktop-windows-setup.exe.zip -> ../seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.zip
|
||||
# |- seanime-desktop-windows-setup.exe.sig -> ../seanime-desktop-${{ env.VERSION }}_Windows_x86_64.sig
|
||||
run: |
|
||||
if [ -f ./artifacts/seanime-desktop-darwin-arm.app.tar.gz ]; then
|
||||
mv ./artifacts/seanime-desktop-darwin-arm.app.tar.gz ./seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz
|
||||
mv ./artifacts/seanime-desktop-darwin-arm.app.tar.gz.sig ./seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz.sig
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-desktop-darwin-intel.app.tar.gz ]; then
|
||||
mv ./artifacts/seanime-desktop-darwin-intel.app.tar.gz ./seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz
|
||||
mv ./artifacts/seanime-desktop-darwin-intel.app.tar.gz.sig ./seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz.sig
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-desktop-linux.AppImage.tar.gz ]; then
|
||||
mv ./artifacts/seanime-desktop-linux.AppImage ./seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage
|
||||
mv ./artifacts/seanime-desktop-linux.AppImage.tar.gz ./seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.tar.gz
|
||||
mv ./artifacts/seanime-desktop-linux.AppImage.sig ./seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.sig
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-desktop-windows-setup.exe.zip ]; then
|
||||
mv ./artifacts/seanime-desktop-windows-setup.exe ./seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe
|
||||
mv ./artifacts/seanime-desktop-windows-setup.exe.zip ./seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.zip
|
||||
mv ./artifacts/seanime-desktop-windows-setup.exe.sig ./seanime-desktop-${{ env.VERSION }}_Windows_x86_64.sig
|
||||
fi
|
||||
|
||||
- name: Move & Rename Electron assets 📝🗃️
|
||||
# Move Electron assets to the root directory and rename them
|
||||
run: |
|
||||
if [ -f ./artifacts/seanime-denshi-darwin-arm64.dmg ]; then
|
||||
mv ./artifacts/seanime-denshi-darwin-arm64.dmg ./seanime-denshi-${{ env.VERSION }}_MacOS_arm64.dmg
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-denshi-darwin-x64.dmg ]; then
|
||||
mv ./artifacts/seanime-denshi-darwin-x64.dmg ./seanime-denshi-${{ env.VERSION }}_MacOS_x64.dmg
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-denshi-linux-x64.AppImage ]; then
|
||||
mv ./artifacts/seanime-denshi-linux-x64.AppImage ./seanime-denshi-${{ env.VERSION }}_Linux_x64.AppImage
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-denshi-windows-x64.exe ]; then
|
||||
mv ./artifacts/seanime-denshi-windows-x64.exe ./seanime-denshi-${{ env.VERSION }}_Windows_x64.exe
|
||||
fi
|
||||
|
||||
# Copy electron-builder YML files if they exist
|
||||
find ./artifacts -name "*.yml" -exec cp {} ./ \;
|
||||
|
||||
- name: Print all
|
||||
run: ls -la .
|
||||
|
||||
# Go
|
||||
- name: Set up Go ⬇️
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.24.3'
|
||||
|
||||
# Build the Go script
|
||||
- name: Build Go scripts 🛠️
|
||||
run: |
|
||||
go build -o generate_updater_latest ./.github/scripts/generate_updater_latest.go
|
||||
go build -o generate_release_notes ./.github/scripts/generate_release_notes.go
|
||||
|
||||
# Run the Go scripts
|
||||
- name: Generate latest.json 📦️
|
||||
env:
|
||||
APP_VERSION: ${{ env.VERSION }}
|
||||
run: ./generate_updater_latest
|
||||
- name: Generate release notes 📦️
|
||||
env:
|
||||
APP_VERSION: ${{ env.VERSION }}
|
||||
run: ./generate_release_notes
|
||||
|
||||
- name: Read release notes 🔍
|
||||
id: read_release_notes
|
||||
run: |
|
||||
BODY=$(cat whats-new.md)
|
||||
echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
|
||||
echo "$BODY" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
- name: Create release draft 🚀🚀🚀
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: false
|
||||
files: |
|
||||
latest.json
|
||||
latest.yml
|
||||
latest-linux.yml
|
||||
latest-mac.yml
|
||||
latest-mac-arm64.yml
|
||||
# Tauri Desktop builds
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz.sig
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz.sig
|
||||
seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage
|
||||
seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.tar.gz
|
||||
seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.sig
|
||||
seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe
|
||||
seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.zip
|
||||
seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.sig
|
||||
# Electron Desktop builds
|
||||
seanime-denshi-${{ env.VERSION }}_MacOS_arm64.dmg
|
||||
seanime-denshi-${{ env.VERSION }}_MacOS_x64.dmg
|
||||
seanime-denshi-${{ env.VERSION }}_Linux_x64.AppImage
|
||||
seanime-denshi-${{ env.VERSION }}_Windows_x64.exe
|
||||
# Server builds
|
||||
seanime-${{ env.VERSION }}_MacOS_x86_64.tar.gz
|
||||
seanime-${{ env.VERSION }}_MacOS_arm64.tar.gz
|
||||
seanime-${{ env.VERSION }}_Linux_x86_64.tar.gz
|
||||
seanime-${{ env.VERSION }}_Linux_arm64.tar.gz
|
||||
seanime-${{ env.VERSION }}_Windows_x86_64.zip
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tag_name: v${{ env.VERSION }}
|
||||
release_name: v${{ env.VERSION }}
|
||||
draft: true
|
||||
prerelease: false
|
||||
body: |
|
||||
## What's new?
|
||||
|
||||
${{ env.RELEASE_BODY }}
|
||||
|
||||
---
|
||||
[Open an issue](https://github.com/5rahim/seanime/issues/new/choose)
|
||||
653
seanime-2.9.10/.github/workflows/release-draft.yml
vendored
Normal file
653
seanime-2.9.10/.github/workflows/release-draft.yml
vendored
Normal file
@@ -0,0 +1,653 @@
|
||||
name: Release Draft
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
|
||||
build-webapp: # TODO Uncomment if building web
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# Web
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
# outputs in "seanime-web/out/" and "seanime-web/out-desktop/"
|
||||
- name: Install dependencies and build Next.js app
|
||||
run: |
|
||||
cd seanime-web/
|
||||
npm install
|
||||
npm run build
|
||||
npm run build:desktop
|
||||
cd ..
|
||||
# Upload the output to be used in the next job
|
||||
- name: Upload web folder
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web
|
||||
path: seanime-web/out # output dir of build
|
||||
- name: Upload web folder (desktop)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web-desktop
|
||||
path: seanime-web/out-desktop # output dir of build:desktop
|
||||
|
||||
build-server:
|
||||
needs: build-webapp # TODO Uncomment if building web
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
# 6 binaries: 2 for Windows, 2 for Linux, 2 for macOS
|
||||
include:
|
||||
# This is the systray version of the Windows binary used for the server build
|
||||
- os: macos-latest # seanime-server-systray-windows.exe
|
||||
id: seanime-server-systray-windows
|
||||
go_flags: -trimpath -buildmode=exe -ldflags="-s -w -H=windowsgui -extldflags '-static'"
|
||||
|
||||
# This is the non-systray version of the Windows binary used for the Tauri Windows build
|
||||
- os: windows-latest # seanime-server-windows.exe
|
||||
id: seanime-server-windows
|
||||
go_flags: -trimpath -ldflags="-s -w" -tags=nosystray
|
||||
|
||||
# These are the Linux binaries used for the server build and the Tauri Linux build
|
||||
- os: ubuntu-latest # seanime-server-linux-arm64, seanime-server-linux-amd64
|
||||
id: seanime-server-linux
|
||||
go_flags: -trimpath -ldflags="-s -w"
|
||||
|
||||
# These are the macOS binaries used for the server build and the Tauri macOS build
|
||||
- os: macos-latest # seanime-server-darwin-arm64, seanime-server-darwin-amd64
|
||||
id: seanime-server-darwin
|
||||
go_env: CGO_ENABLED=0
|
||||
go_flags: -trimpath -ldflags="-s -w"
|
||||
steps:
|
||||
- name: Checkout code ⬇️
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Fetch all history
|
||||
fetch-tags: true # Fetch all tags
|
||||
set-safe-directory: true # Add repo path as safe.directory
|
||||
|
||||
- name: Fetch all tags # Fetch all tags (again? can't hurt)
|
||||
run: git fetch --force --tags
|
||||
|
||||
# Go
|
||||
- name: Set up Go ⬇️
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.24.1'
|
||||
|
||||
# Download the web folders
|
||||
# TODO Uncomment if building web
|
||||
- name: Download web folder artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: web
|
||||
path: web
|
||||
|
||||
# Create the binary destination folder
|
||||
# ./binaries
|
||||
# |--- ...
|
||||
- name: Create binary destination folder (UNIX) 🗃️
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
|
||||
run: mkdir -p binaries
|
||||
- name: Create binary destination folder (Windows) 🗃️
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: mkdir -p binaries
|
||||
shell: bash
|
||||
|
||||
|
||||
#---
|
||||
|
||||
# ONLY for Windows systray build (seanime-server-systray-windows)
|
||||
# For the Windows systray build (built on macOS runner), we need to install the necessary dependencies
|
||||
- name: Install C dependencies ⬇️ # macos windows systray build
|
||||
if: matrix.id == 'seanime-server-systray-windows'
|
||||
run: |
|
||||
brew install filosottile/musl-cross/musl-cross
|
||||
brew install llvm
|
||||
brew install mingw-w64
|
||||
|
||||
# Build the Windows systray binary
|
||||
# ./binaries/seanime-server-systray-windows.exe
|
||||
- name: Build Windows Systray 📦️
|
||||
if: matrix.id == 'seanime-server-systray-windows'
|
||||
env:
|
||||
GOARCH: amd64
|
||||
GOOS: windows
|
||||
CGO_ENABLED: 1
|
||||
CC: x86_64-w64-mingw32-gcc
|
||||
CXX: x86_64-w64-mingw32-g++
|
||||
run: |
|
||||
go build -o seanime-server-systray-windows.exe ${{ matrix.go_flags }} .
|
||||
|
||||
# Build the Windows non-systray binary
|
||||
# ./seanime-server-windows.exe
|
||||
- name: Build Windows Non-Systray 📦️
|
||||
if: matrix.id == 'seanime-server-windows'
|
||||
env:
|
||||
GOARCH: amd64
|
||||
GOOS: windows
|
||||
CGO_ENABLED: 0
|
||||
run: |
|
||||
go build -o seanime-server-windows.exe ${{ matrix.go_flags }} .
|
||||
shell: bash
|
||||
|
||||
# Build the Linux binaries
|
||||
# ./seanime-server-linux-amd64
|
||||
# ./seanime-server-linux-arm64
|
||||
- name: Build Linux 📦️
|
||||
if: matrix.id == 'seanime-server-linux'
|
||||
run: |
|
||||
CGO_ENABLED=0 GOARCH=amd64 go build -o seanime-server-linux-amd64 ${{ matrix.go_flags }} .
|
||||
CGO_ENABLED=0 GOARCH=arm64 go build -o seanime-server-linux-arm64 ${{ matrix.go_flags }} .
|
||||
|
||||
# Build the macOS binaries
|
||||
# ./seanime-server-darwin-amd64
|
||||
# ./seanime-server-darwin-arm64
|
||||
- name: Build macOS 📦️
|
||||
if: matrix.id == 'seanime-server-darwin'
|
||||
run: |
|
||||
CGO_ENABLED=0 GOARCH=amd64 go build -o seanime-server-darwin-amd64 ${{ matrix.go_flags }} .
|
||||
CGO_ENABLED=0 GOARCH=arm64 go build -o seanime-server-darwin-arm64 ${{ matrix.go_flags }} .
|
||||
|
||||
# Tar the binaries
|
||||
- name: Tar the binaries (UNIX) 🗃️
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
|
||||
# binaries-seanime-server-darwin.tar
|
||||
# binaries-seanime-server-linux.tar
|
||||
# binaries-seanime-server-systray-windows.tar
|
||||
run: |
|
||||
tar -cf binaries-${{ matrix.id }}.tar seanime-server-*
|
||||
|
||||
# Zip the binaries
|
||||
- name: Zip the binaries (Windows) 🗃️
|
||||
if: matrix.os == 'windows-latest'
|
||||
# binaries-seanime-server-windows.zip
|
||||
run: |
|
||||
7z a "binaries-${{ matrix.id }}.zip" seanime-server-*
|
||||
|
||||
# Upload the binaries to be used in the next job
|
||||
- name: Upload binary folder (UNIX) 📤
|
||||
uses: actions/upload-artifact@v4
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
|
||||
with:
|
||||
# go-seanime-server-linux
|
||||
# go-seanime-server-darwin
|
||||
# go-seanime-server-systray-windows
|
||||
name: go-${{ matrix.id }}
|
||||
path: binaries-${{ matrix.id }}.tar
|
||||
|
||||
- name: Upload binary folder (Windows) 📤
|
||||
uses: actions/upload-artifact@v4
|
||||
if: matrix.os == 'windows-latest'
|
||||
with:
|
||||
# go-seanime-server-windows
|
||||
name: go-${{ matrix.id }}
|
||||
path: binaries-${{ matrix.id }}.zip
|
||||
|
||||
|
||||
build-tauri:
|
||||
needs: build-server
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# IDs:
|
||||
# - seanime-desktop-darwin-arm
|
||||
# - seanime-desktop-darwin-intel
|
||||
# - seanime-desktop-linux
|
||||
# - seanime-desktop-windows
|
||||
include:
|
||||
# For Arm-based macs (M1 and above).
|
||||
- os: 'macos-latest'
|
||||
id: 'seanime-desktop-darwin-arm'
|
||||
go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64)
|
||||
args: '--target aarch64-apple-darwin'
|
||||
# For Intel-based macs.
|
||||
- os: 'macos-latest'
|
||||
id: 'seanime-desktop-darwin-intel'
|
||||
go_binary_id: 'seanime-server-darwin' # Artifact: go-seanime-server-darwin (contains both arm64 and x86_64)
|
||||
args: '--target x86_64-apple-darwin'
|
||||
# For Linux
|
||||
- os: 'ubuntu-22.04' # for Linux
|
||||
id: 'seanime-desktop-linux' # Artifact: go-seanime-server-linux (contains both arm64 and x86_64)
|
||||
go_binary_id: 'seanime-server-linux'
|
||||
args: ''
|
||||
# For Windows
|
||||
- os: 'windows-latest' # for Windows
|
||||
id: 'seanime-desktop-windows' # Artifact: go-seanime-server-windows (contains x86_64)
|
||||
go_binary_id: 'seanime-server-windows'
|
||||
args: ''
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies (Ubuntu) ⬇️
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
|
||||
|
||||
- name: Install Rust stable ⬇️
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
# Those targets are only used on macOS runners so it's in an `if` to slightly speed up windows and linux builds.
|
||||
targets: ${{ matrix.id == 'seanime-desktop-darwin-intel' && 'x86_64-apple-darwin' || matrix.id == 'seanime-desktop-darwin-arm' && 'aarch64-apple-darwin' || '' }}
|
||||
|
||||
- name: Setup node ⬇️
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
- name: Install Tauri CLI ⬇️
|
||||
run: |
|
||||
cd seanime-desktop
|
||||
npm install
|
||||
|
||||
- name: Rust cache ⬇️
|
||||
uses: swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: './seanime-desktop/src-tauri -> target'
|
||||
|
||||
|
||||
# Download the web folder
|
||||
# TODO Uncomment if building web
|
||||
- name: Download web folder artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: web-desktop
|
||||
path: web-desktop
|
||||
|
||||
# Download the server binaries depending on matrix.go_binary_id
|
||||
- name: Download server binaries 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
# go-seanime-server-windows or
|
||||
# go-seanime-server-linux or
|
||||
# go-seanime-server-darwin
|
||||
name: go-${{ matrix.go_binary_id }}
|
||||
path: ./seanime-desktop/src-tauri/binaries
|
||||
|
||||
- name: Extract server binaries (UNIX) 📂
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: tar -xf ./seanime-desktop/src-tauri/binaries/binaries-${{ matrix.go_binary_id }}.tar -C ./seanime-desktop/src-tauri/binaries
|
||||
- name: Extract server binaries (Windows) 📂
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: 7z x ".\seanime-desktop\src-tauri\binaries\binaries-${{ matrix.go_binary_id }}.zip" "-o./seanime-desktop/src-tauri/binaries/"
|
||||
|
||||
|
||||
# ----------------------------------------------------------------- delete
|
||||
- name: Print downloaded binaries (UNIX)
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: ls -la ./seanime-desktop/src-tauri/binaries
|
||||
- name: Print downloaded binaries (Windows)
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dir ./seanime-desktop/src-tauri/binaries
|
||||
# ----------------------------------------------------------------- delete
|
||||
|
||||
- name: Determine target triple (UNIX) 🎯
|
||||
# id: target_triple
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
TARGET_TRIPLE=$(rustc -Vv | grep host | cut -f2 -d' ')
|
||||
echo "TARGET_TRIPLE=${TARGET_TRIPLE}" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine target triple (Windows) 🎯
|
||||
# id: target_triple
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
$TARGET_TRIPLE = rustc -Vv | Select-String "host:" | ForEach-Object {$_.Line.split(" ")[1]}
|
||||
echo "TARGET_TRIPLE=$TARGET_TRIPLE" >> $env:GITHUB_ENV
|
||||
shell: pwsh
|
||||
|
||||
# seanime-server-windows.exe -> seanime-x86_64-pc-windows-msvc.exe
|
||||
- name: Rename sidecar binary (Windows) 📝
|
||||
if: matrix.id == 'seanime-desktop-windows'
|
||||
run: |
|
||||
powershell -Command "Rename-Item -Path ./seanime-desktop/src-tauri/binaries/seanime-server-windows.exe -NewName seanime-${{ env.TARGET_TRIPLE }}.exe"
|
||||
|
||||
# seanime-server-linux-amd64 -> seanime-unknown-linux-musl
|
||||
- name: Rename sidecar binaries (Linux) 📝
|
||||
if: matrix.id == 'seanime-desktop-linux'
|
||||
run: |
|
||||
mv ./seanime-desktop/src-tauri/binaries/seanime-server-linux-amd64 ./seanime-desktop/src-tauri/binaries/seanime-${{ env.TARGET_TRIPLE }}
|
||||
|
||||
# seanime-server-darwin-amd64 -> seanime-x86_64-apple-darwin
|
||||
- name: Rename sidecar binaries (MacOS Intel) 📝
|
||||
if: matrix.id == 'seanime-desktop-darwin-intel'
|
||||
# Here we hardcode the target triple because the macOS runner is ARM based
|
||||
run: |
|
||||
mv ./seanime-desktop/src-tauri/binaries/seanime-server-darwin-amd64 ./seanime-desktop/src-tauri/binaries/seanime-x86_64-apple-darwin
|
||||
|
||||
# seanime-server-darwin-arm64 -> seanime-aarch64-apple-darwin
|
||||
- name: Rename sidecar binaries (MacOS Arm) 📝
|
||||
if: matrix.id == 'seanime-desktop-darwin-arm'
|
||||
run: |
|
||||
mv ./seanime-desktop/src-tauri/binaries/seanime-server-darwin-arm64 ./seanime-desktop/src-tauri/binaries/seanime-${{ env.TARGET_TRIPLE }}
|
||||
|
||||
# ----------------------------------------------------------------- delete
|
||||
- name: Print downloaded binaries
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: ls -la ./seanime-desktop/src-tauri/binaries
|
||||
- name: Print downloaded binaries
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dir ./seanime-desktop/src-tauri/binaries
|
||||
# ----------------------------------------------------------------- delete
|
||||
|
||||
# Build Tauri
|
||||
- name: Run Tauri action 🚀
|
||||
id: tauri-action
|
||||
uses: tauri-apps/tauri-action@v0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
# APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
||||
# APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
||||
# APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
||||
# APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
# APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
||||
# APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
with:
|
||||
projectPath: './seanime-desktop'
|
||||
args: ${{ matrix.args }}
|
||||
updaterJsonPreferNsis: true
|
||||
|
||||
- name: Rename Tauri artifacts (UNIX) 📝
|
||||
# ./
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz.sig <- Signature
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz.sig <- Signature
|
||||
# |- seanime-desktop-linux.AppImage <- UNCOMPRESSED
|
||||
# |- seanime-desktop-linux.AppImage.sig <- Signature UNCOMPRESSED
|
||||
# |- seanime-desktop-windows-setup.exe <- UNCOMPRESSED
|
||||
# |- seanime-desktop-windows-setup.exe.sig <- Signature UNCOMPRESSED
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
# We hardcode the macOS target triple because the macOS runner is ARM based and builds both arm64 and x86_64
|
||||
run: |
|
||||
if [ -f ./seanime-desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ]; then
|
||||
mv ./seanime-desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ./seanime-desktop-darwin-arm.app.tar.gz
|
||||
mv ./seanime-desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz.sig ./seanime-desktop-darwin-arm.app.tar.gz.sig
|
||||
|
||||
elif [ -f ./seanime-desktop/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ]; then
|
||||
mv ./seanime-desktop/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz ./seanime-desktop-darwin-intel.app.tar.gz
|
||||
mv ./seanime-desktop/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Seanime\ Desktop.app.tar.gz.sig ./seanime-desktop-darwin-intel.app.tar.gz.sig
|
||||
|
||||
elif [ -f ./seanime-desktop/src-tauri/target/release/bundle/appimage/Seanime\ Desktop_${{ steps.tauri-action.outputs.appVersion }}_amd64.AppImage ]; then
|
||||
mv ./seanime-desktop/src-tauri/target/release/bundle/appimage/Seanime\ Desktop_${{ steps.tauri-action.outputs.appVersion }}_amd64.AppImage ./seanime-desktop-linux.AppImage
|
||||
mv ./seanime-desktop/src-tauri/target/release/bundle/appimage/Seanime\ Desktop_${{ steps.tauri-action.outputs.appVersion }}_amd64.AppImage.sig ./seanime-desktop-linux.AppImage.sig
|
||||
fi
|
||||
|
||||
- name: Rename Tauri artifacts (Windows) 📝
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
powershell -Command "Move-Item -Path './seanime-desktop/src-tauri/target/release/bundle/nsis/Seanime Desktop_${{ steps.tauri-action.outputs.appVersion }}_x64-setup.exe' -Destination './seanime-desktop-windows-setup.exe'"
|
||||
powershell -Command "Move-Item -Path './seanime-desktop/src-tauri/target/release/bundle/nsis/Seanime Desktop_${{ steps.tauri-action.outputs.appVersion }}_x64-setup.exe.sig' -Destination './seanime-desktop-windows-setup.exe.sig'"
|
||||
|
||||
- name: Tar the Tauri artifacts (Linux) 🗃️
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
# Note: The macOS artifacts are already packaged, so we don't need to compress them
|
||||
# Compress the Linux AppImage, not the signature
|
||||
run: |
|
||||
if [ -f ./seanime-desktop-linux.AppImage ]; then
|
||||
tar -czf seanime-desktop-linux.AppImage.tar.gz seanime-desktop-linux.AppImage
|
||||
fi
|
||||
- name: Zip the Tauri artifacts (Windows) 🗃️
|
||||
if: matrix.os == 'windows-latest'
|
||||
# Compress the Windows setup, not the signature
|
||||
run: |
|
||||
7z a seanime-desktop-windows-setup.exe.zip seanime-desktop-windows-setup.exe
|
||||
|
||||
# ----------------------------------------------------------------- delete
|
||||
- name: Print all
|
||||
if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-22.04'
|
||||
run: ls -la .
|
||||
- name: Print downloaded binaries
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: dir .
|
||||
# ----------------------------------------------------------------- delete
|
||||
|
||||
# Upload the Tauri artifacts to be used in the next job
|
||||
- name: Upload tauri artifacts 📤
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
# Artifact IDs:
|
||||
# tauri-seanime-server-darwin-arm
|
||||
# tauri-seanime-server-darwin-intel
|
||||
# tauri-seanime-server-linux
|
||||
# tauri-seanime-server-windows
|
||||
name: tauri-${{ matrix.id }}
|
||||
path: |
|
||||
./seanime-desktop-darwin-arm.app.tar.gz
|
||||
./seanime-desktop-darwin-arm.app.tar.gz.sig
|
||||
./seanime-desktop-darwin-intel.app.tar.gz
|
||||
./seanime-desktop-darwin-intel.app.tar.gz.sig
|
||||
./seanime-desktop-linux.AppImage
|
||||
./seanime-desktop-linux.AppImage.tar.gz
|
||||
./seanime-desktop-linux.AppImage.sig
|
||||
./seanime-desktop-windows-setup.exe
|
||||
./seanime-desktop-windows-setup.exe.zip
|
||||
./seanime-desktop-windows-setup.exe.sig
|
||||
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [ build-server, build-tauri ]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download tauri artifacts 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: tauri-*
|
||||
path: ./artifacts
|
||||
merge-multiple: true
|
||||
|
||||
- name: Determine version from tag name 🔎
|
||||
run: |
|
||||
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
|
||||
VERSION=${GITHUB_REF/refs\/tags\/v/}
|
||||
echo "Version extracted from tag: $VERSION"
|
||||
elif [[ "$GITHUB_REF" == refs/tags/* ]]; then
|
||||
VERSION=${GITHUB_REF/refs\/tags\//}
|
||||
echo "Version extracted from tag: $VERSION"
|
||||
else
|
||||
echo "Warning: No tag associated with this run. Defaulting to version 0.1.0."
|
||||
VERSION="0.1.0"
|
||||
fi
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
|
||||
- name: Print version
|
||||
run: echo "Version is ${{ env.VERSION }}"
|
||||
|
||||
- name: Download server binaries 📥
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: go-*
|
||||
path: ./artifacts
|
||||
# ./artifacts
|
||||
# |- binaries-seanime-server-darwin.tar (contains 2)
|
||||
# |- binaries-seanime-server-linux.tar (contains 2)
|
||||
# |- binaries-seanime-server-systray-windows.tar (contains 1)
|
||||
merge-multiple: true
|
||||
|
||||
- name: Print all artifacts
|
||||
run: ls -la ./artifacts
|
||||
|
||||
- name: Extract - Rename - Archive server binaries 📂
|
||||
# ./artifacts
|
||||
# |- ...
|
||||
# \/ /binaries-seanime-server-darwin.tar
|
||||
# |- seanime-server-darwin-amd64 -> ../seanime -> ../seanime-${{ env.VERSION }}_MacOS_arm64.tar.gz
|
||||
# |- seanime-server-darwin-arm64 -> ../seanime -> ../seanime-${{ env.VERSION }}_MacOS_x86_64.tar.gz
|
||||
# \/ /binaries-seanime-server-darwin.tar
|
||||
# |- seanime-server-linux-amd64 -> ../seanime -> ../seanime-${{ env.VERSION }}_Linux_x86_64.tar.gz
|
||||
# |- seanime-server-linux-arm64 -> ../seanime -> ../seanime-${{ env.VERSION }}_Linux_arm64.tar.gz
|
||||
# \/ /binaries-seanime-server-systray-windows.tar
|
||||
# |- seanime-server-systray-windows.exe -> ../seanime.exe -> ../seanime-${{ env.VERSION }}_Windows_x86_64.zip
|
||||
run: |
|
||||
if [ -f ./artifacts/binaries-seanime-server-darwin.tar ]; then
|
||||
# Extract binaries
|
||||
tar -xf ./artifacts/binaries-seanime-server-darwin.tar -C ./artifacts
|
||||
|
||||
# Rename & compress binaries
|
||||
mv ./artifacts/seanime-server-darwin-amd64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_MacOS_x86_64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
|
||||
|
||||
mv ./artifacts/seanime-server-darwin-arm64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_MacOS_arm64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
fi
|
||||
|
||||
if [ -f ./artifacts/binaries-seanime-server-linux.tar ]; then
|
||||
# Extract binaries
|
||||
tar -xf ./artifacts/binaries-seanime-server-linux.tar -C ./artifacts
|
||||
|
||||
# Rename & compress binaries
|
||||
mv ./artifacts/seanime-server-linux-amd64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_Linux_x86_64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
|
||||
|
||||
mv ./artifacts/seanime-server-linux-arm64 ./seanime
|
||||
tar czf ./seanime-${{ env.VERSION }}_Linux_arm64.tar.gz ./seanime
|
||||
rm -rf ./seanime
|
||||
fi
|
||||
|
||||
if [ -f ./artifacts/binaries-seanime-server-systray-windows.tar ]; then
|
||||
# Extract binaries
|
||||
tar -xf ./artifacts/binaries-seanime-server-systray-windows.tar -C ./artifacts
|
||||
|
||||
# Rename & compress binaries
|
||||
mv ./artifacts/seanime-server-systray-windows.exe ./seanime.exe
|
||||
7z a ./seanime-${{ env.VERSION }}_Windows_x86_64.zip ./seanime.exe
|
||||
rm -rf ./seanime.exe
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: Print all artifacts
|
||||
run: ls -la ./artifacts
|
||||
|
||||
- name: Move & Rename Tauri assets 📝🗃️
|
||||
# Move Tauri assets to the root directory and rename them
|
||||
# ./artifacts
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz -> ../seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz
|
||||
# |- seanime-desktop-darwin-arm.app.tar.gz.sig -> ../seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz.sig
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz -> ../seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz
|
||||
# |- seanime-desktop-darwin-intel.app.tar.gz.sig -> ../seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz.sig
|
||||
# |- seanime-desktop-linux.AppImage -> ../seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage
|
||||
# |- seanime-desktop-linux.AppImage.tar.gz -> ../seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.tar.gz
|
||||
# |- seanime-desktop-linux.AppImage.sig -> ../seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.sig
|
||||
# |- seanime-desktop-windows-setup.exe -> ../seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe
|
||||
# |- seanime-desktop-windows-setup.exe.zip -> ../seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.zip
|
||||
# |- seanime-desktop-windows-setup.exe.sig -> ../seanime-desktop-${{ env.VERSION }}_Windows_x86_64.sig
|
||||
run: |
|
||||
if [ -f ./artifacts/seanime-desktop-darwin-arm.app.tar.gz ]; then
|
||||
mv ./artifacts/seanime-desktop-darwin-arm.app.tar.gz ./seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz
|
||||
mv ./artifacts/seanime-desktop-darwin-arm.app.tar.gz.sig ./seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz.sig
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-desktop-darwin-intel.app.tar.gz ]; then
|
||||
mv ./artifacts/seanime-desktop-darwin-intel.app.tar.gz ./seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz
|
||||
mv ./artifacts/seanime-desktop-darwin-intel.app.tar.gz.sig ./seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz.sig
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-desktop-linux.AppImage.tar.gz ]; then
|
||||
mv ./artifacts/seanime-desktop-linux.AppImage ./seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage
|
||||
mv ./artifacts/seanime-desktop-linux.AppImage.tar.gz ./seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.tar.gz
|
||||
mv ./artifacts/seanime-desktop-linux.AppImage.sig ./seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.sig
|
||||
fi
|
||||
if [ -f ./artifacts/seanime-desktop-windows-setup.exe.zip ]; then
|
||||
mv ./artifacts/seanime-desktop-windows-setup.exe ./seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe
|
||||
mv ./artifacts/seanime-desktop-windows-setup.exe.zip ./seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.zip
|
||||
mv ./artifacts/seanime-desktop-windows-setup.exe.sig ./seanime-desktop-${{ env.VERSION }}_Windows_x86_64.sig
|
||||
fi
|
||||
|
||||
- name: Print all
|
||||
run: ls -la .
|
||||
|
||||
# Go
|
||||
- name: Set up Go ⬇️
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.24.1'
|
||||
|
||||
# Build the Go script
|
||||
- name: Build Go scripts 🛠️
|
||||
run: |
|
||||
go build -o generate_updater_latest ./.github/scripts/generate_updater_latest.go
|
||||
go build -o generate_release_notes ./.github/scripts/generate_release_notes.go
|
||||
|
||||
# Run the Go scripts
|
||||
- name: Generate latest.json 📦️
|
||||
env:
|
||||
APP_VERSION: ${{ env.VERSION }}
|
||||
run: ./generate_updater_latest
|
||||
- name: Generate release notes 📦️
|
||||
env:
|
||||
APP_VERSION: ${{ env.VERSION }}
|
||||
run: ./generate_release_notes
|
||||
|
||||
- name: Read release notes 🔍
|
||||
id: read_release_notes
|
||||
run: |
|
||||
BODY=$(cat whats-new.md)
|
||||
echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
|
||||
echo "$BODY" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
- name: Create release draft 🚀🚀🚀
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
fail_on_unmatched_files: false
|
||||
files: |
|
||||
latest.json
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_arm64.app.tar.gz.sig
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz
|
||||
seanime-desktop-${{ env.VERSION }}_MacOS_x86_64.app.tar.gz.sig
|
||||
seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage
|
||||
seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.tar.gz
|
||||
seanime-desktop-${{ env.VERSION }}_Linux_x86_64.AppImage.sig
|
||||
seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe
|
||||
seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.zip
|
||||
seanime-desktop-${{ env.VERSION }}_Windows_x86_64.exe.sig
|
||||
seanime-${{ env.VERSION }}_MacOS_x86_64.tar.gz
|
||||
seanime-${{ env.VERSION }}_MacOS_arm64.tar.gz
|
||||
seanime-${{ env.VERSION }}_Linux_x86_64.tar.gz
|
||||
seanime-${{ env.VERSION }}_Linux_arm64.tar.gz
|
||||
seanime-${{ env.VERSION }}_Windows_x86_64.zip
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tag_name: v${{ env.VERSION }}
|
||||
release_name: v${{ env.VERSION }}
|
||||
draft: true
|
||||
prerelease: false
|
||||
body: |
|
||||
## What's new?
|
||||
|
||||
${{ env.RELEASE_BODY }}
|
||||
|
||||
---
|
||||
[Open an issue](https://github.com/5rahim/seanime/issues/new/choose)
|
||||
Reference in New Issue
Block a user