Skip to content

Fix build tag naming #7

Fix build tag naming

Fix build tag naming #7

Workflow file for this run

name: Build and Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
build-linux-amd64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install dependencies
run: |
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt pyinstaller
- name: Download Node.js
run: |
mkdir -p .tools
curl -fsSL https://nodejs.org/dist/v22.14.0/node-v22.14.0-linux-x64.tar.xz | tar -xJ --strip-components=1 -C .tools
- name: Prepare certifi
run: |
mkdir -p certifi
cp "$(.venv/bin/python -c 'import certifi; print(certifi.where())')" certifi/cacert.pem
- name: Build with PyInstaller
run: |
.venv/bin/pyinstaller server.py \
--name=gozik-yt-music-server \
--onedir \
--distpath=dist \
--workpath=build \
--hidden-import=ytmusicapi \
--hidden-import=grpc \
--hidden-import=grpc._cython \
--hidden-import=grpc._cython.cygrpc \
--hidden-import=google.protobuf \
--hidden-import=google.protobuf.internal \
--hidden-import=yt_dlp \
--hidden-import=yt_dlp.extractor \
--hidden-import=yt_dlp.extractor.youtubetab \
--hidden-import=yt_dlp.extractor.youtube \
--hidden-import=requests \
--hidden-import=certifi \
--hidden-import=charset_normalizer \
--hidden-import=idna \
--hidden-import=urllib3 \
--hidden-import=generated \
--hidden-import=handlers \
--collect-all=ytmusicapi \
--collect-all=grpc \
--collect-all=google.protobuf \
--collect-all=yt_dlp \
--collect-all=certifi \
--add-data=generated:generated \
--add-data=certifi/cacert.pem:certifi \
--add-binary=.tools/bin/node:. \
--exclude-module=tkinter \
--exclude-module=unittest \
--exclude-module=test \
--exclude-module=grpc_tools \
--exclude-module=lib2to3 \
--exclude-module=pydoc \
--exclude-module=doctest \
--noconfirm \
--clean
- name: Package
run: |
cd dist
tar czf gozik-yt-music-server-linux-amd64.tar.gz gozik-yt-music-server
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gozik-yt-music-server-linux-amd64
path: dist/gozik-yt-music-server-linux-amd64.tar.gz
build-linux-arm64:
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install dependencies
run: |
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt pyinstaller
- name: Download Node.js
run: |
mkdir -p .tools
curl -fsSL https://nodejs.org/dist/v22.14.0/node-v22.14.0-linux-arm64.tar.xz | tar -xJ --strip-components=1 -C .tools
- name: Prepare certifi
run: |
mkdir -p certifi
cp "$(.venv/bin/python -c 'import certifi; print(certifi.where())')" certifi/cacert.pem
- name: Build with PyInstaller
run: |
.venv/bin/pyinstaller server.py \
--name=gozik-yt-music-server \
--onedir \
--distpath=dist \
--workpath=build \
--hidden-import=ytmusicapi \
--hidden-import=grpc \
--hidden-import=grpc._cython \
--hidden-import=grpc._cython.cygrpc \
--hidden-import=google.protobuf \
--hidden-import=google.protobuf.internal \
--hidden-import=yt_dlp \
--hidden-import=yt_dlp.extractor \
--hidden-import=yt_dlp.extractor.youtubetab \
--hidden-import=yt_dlp.extractor.youtube \
--hidden-import=requests \
--hidden-import=certifi \
--hidden-import=charset_normalizer \
--hidden-import=idna \
--hidden-import=urllib3 \
--hidden-import=generated \
--hidden-import=handlers \
--collect-all=ytmusicapi \
--collect-all=grpc \
--collect-all=google.protobuf \
--collect-all=yt_dlp \
--collect-all=certifi \
--add-data=generated:generated \
--add-data=certifi/cacert.pem:certifi \
--add-binary=.tools/bin/node:. \
--exclude-module=tkinter \
--exclude-module=unittest \
--exclude-module=test \
--exclude-module=grpc_tools \
--exclude-module=lib2to3 \
--exclude-module=pydoc \
--exclude-module=doctest \
--noconfirm \
--clean
- name: Package
run: |
cd dist
tar czf gozik-yt-music-server-linux-arm64.tar.gz gozik-yt-music-server
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gozik-yt-music-server-linux-arm64
path: dist/gozik-yt-music-server-linux-arm64.tar.gz
build-macos-arm64:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install dependencies
run: |
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt pyinstaller
- name: Download Node.js
run: |
mkdir -p .tools
curl -fsSL https://nodejs.org/dist/v22.14.0/node-v22.14.0-darwin-arm64.tar.xz | tar -xJ --strip-components=1 -C .tools
- name: Prepare certifi
run: |
mkdir -p certifi
cp "$(.venv/bin/python -c 'import certifi; print(certifi.where())')" certifi/cacert.pem
- name: Build with PyInstaller
run: |
.venv/bin/pyinstaller server.py \
--name=gozik-yt-music-server \
--onedir \
--distpath=dist \
--workpath=build \
--hidden-import=ytmusicapi \
--hidden-import=grpc \
--hidden-import=grpc._cython \
--hidden-import=grpc._cython.cygrpc \
--hidden-import=google.protobuf \
--hidden-import=google.protobuf.internal \
--hidden-import=yt_dlp \
--hidden-import=yt_dlp.extractor \
--hidden-import=yt_dlp.extractor.youtubetab \
--hidden-import=yt_dlp.extractor.youtube \
--hidden-import=requests \
--hidden-import=certifi \
--hidden-import=charset_normalizer \
--hidden-import=idna \
--hidden-import=urllib3 \
--hidden-import=generated \
--hidden-import=handlers \
--collect-all=ytmusicapi \
--collect-all=grpc \
--collect-all=google.protobuf \
--collect-all=yt_dlp \
--collect-all=certifi \
--add-data=generated:generated \
--add-data=certifi/cacert.pem:certifi \
--add-binary=.tools/bin/node:. \
--exclude-module=tkinter \
--exclude-module=unittest \
--exclude-module=test \
--exclude-module=grpc_tools \
--exclude-module=lib2to3 \
--exclude-module=pydoc \
--exclude-module=doctest \
--noconfirm \
--clean
- name: Package
run: |
cd dist
tar czf gozik-yt-music-server-macos-arm64.tar.gz gozik-yt-music-server
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gozik-yt-music-server-macos-arm64
path: dist/gozik-yt-music-server-macos-arm64.tar.gz
build-windows-amd64:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install dependencies
run: |
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt pyinstaller
- name: Download Node.js
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path .tools | Out-Null
Invoke-WebRequest -Uri https://nodejs.org/dist/v22.14.0/node-v22.14.0-win-x64.zip -OutFile node.zip
Expand-Archive -Path node.zip -DestinationPath .tools/tmp -Force
Move-Item .tools/tmp/node-v22.14.0-win-x64/* .tools/
Remove-Item -Recurse -Force .tools/tmp, node.zip
- name: Prepare certifi
shell: bash
run: |
mkdir -p certifi
cp "$(.venv/Scripts/python -c 'import certifi; print(certifi.where())')" certifi/cacert.pem
- name: Build with PyInstaller
shell: pwsh
run: |
.venv\Scripts\pyinstaller server.py `
--name=gozik-yt-music-server `
--onedir `
--distpath=dist `
--workpath=build `
--hidden-import=ytmusicapi `
--hidden-import=grpc `
--hidden-import=grpc._cython `
--hidden-import=grpc._cython.cygrpc `
--hidden-import=google.protobuf `
--hidden-import=google.protobuf.internal `
--hidden-import=yt_dlp `
--hidden-import=yt_dlp.extractor `
--hidden-import=yt_dlp.extractor.youtubetab `
--hidden-import=yt_dlp.extractor.youtube `
--hidden-import=requests `
--hidden-import=certifi `
--hidden-import=charset_normalizer `
--hidden-import=idna `
--hidden-import=urllib3 `
--hidden-import=generated `
--hidden-import=handlers `
--collect-all=ytmusicapi `
--collect-all=grpc `
--collect-all=google.protobuf `
--collect-all=yt_dlp `
--collect-all=certifi `
--add-data="generated;generated" `
--add-data="certifi/cacert.pem;certifi" `
--add-data=".tools/node.exe;." `
--exclude-module=tkinter `
--exclude-module=unittest `
--exclude-module=test `
--exclude-module=grpc_tools `
--exclude-module=lib2to3 `
--exclude-module=pydoc `
--exclude-module=doctest `
--noconfirm `
--clean
- name: Package
shell: pwsh
run: |
cd dist
Compress-Archive -Path gozik-yt-music-server -DestinationPath gozik-yt-music-server-windows-amd64.zip
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: gozik-yt-music-server-windows-amd64
path: dist/gozik-yt-music-server-windows-amd64.zip
release:
name: Create GitHub Release
needs:
- build-linux-amd64
- build-linux-arm64
- build-macos-arm64
- build-windows-amd64
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Create Release
uses: softprops/action-gh-release@v2
with:
files: artifacts/*
generate_release_notes: true