hydrus/.github/workflows/release.yml

259 lines
9.0 KiB
YAML

name: Release
on:
push:
tags:
- 'v*'
jobs:
build-macos:
runs-on: macos-11
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
-
name: Build docs to /help
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade wheel
python3 -m pip install mkdocs-material
mkdocs build -d help
-
name: Install PyOxidizer
run: python3 -m pip install pyoxidizer==0.22.0
-
name: Download ffmpeg
uses: carlosperate/download-file-action@v2
id: download_ffmpeg
with:
file-url: 'https://evermeet.cx/ffmpeg/getrelease/ffmpeg/7z'
file-name: 'ffmpeg-macos.7z'
location: '.'
-
name: Process ffmpeg
run: |
cd $GITHUB_WORKSPACE
7z e ffmpeg-macos.7z -obin "ffmpeg"
-
name: Build Hydrus
run: |
cd $GITHUB_WORKSPACE
cp static/build_files/macos/pyoxidizer.bzl pyoxidizer.bzl
cp static/build_files/macos/requirements.txt requirements.txt
basename $(rustc --print sysroot) | sed -e "s/^stable-//" > triple.txt
pyoxidizer build --release
cd build/$(head -n 1 triple.txt)/release
mkdir -p "Hydrus Network.app/Contents/MacOS"
mkdir -p "Hydrus Network.app/Contents/Resources"
mkdir -p "Hydrus Network.app/Contents/Frameworks"
mv install/static/icon.icns "Hydrus Network.app/Contents/Resources/icon.icns"
cp install/static/build_files/macos/Info.plist "Hydrus Network.app/Contents/Info.plist"
cp install/static/build_files/macos/ReadMeFirst.rtf ./ReadMeFirst.rtf
cp install/static/build_files/macos/running_from_app "install/running_from_app"
ln -s /Applications ./Applications
mv install/* "Hydrus Network.app/Contents/MacOS/"
rm -rf install
-
name: Build DMG
run: |
cd $GITHUB_WORKSPACE
temp_dmg="$(mktemp).dmg"
hdiutil create "$temp_dmg" -ov -volname "HydrusNetwork" -fs HFS+ -format UDZO -srcfolder "$GITHUB_WORKSPACE/build/$(head -n 1 triple.txt)/release"
mv "$temp_dmg" HydrusNetwork.dmg
-
name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
name: MacOS-DMG
path: HydrusNetwork.dmg
if-no-files-found: error
retention-days: 2
build-ubuntu:
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v3
with:
path: hydrus
-
name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
architecture: x64
-
name: APT Install
run: |
sudo apt-get update
sudo apt-get install -y libmpv1
-
name: Pip Install
run: python3 -m pip install -r hydrus/static/build_files/linux/requirements.txt
-
name: Build docs to /help
run: mkdocs build -d help
working-directory: hydrus
-
name: Build Hydrus
run: |
cp hydrus/static/build_files/linux/hydrus_client.spec hydrus_client.spec
cp hydrus/static/build_files/linux/hydrus_server.spec hydrus_server.spec
pyinstaller hydrus_server.spec
pyinstaller hydrus_client.spec
-
name: Remove Chonk
run: |
find dist/hydrus_client/ -type f -name "*.pyc" -delete
while read line; do find dist/hydrus_client/ -type f -name "${line}" -delete ; done < hydrus/static/build_files/linux/files_to_delete.txt
-
name: Remove Surplus File
run: |
rm -f dist/hydrus_client/libxkbcommon.so*
-
name: Set Permissions
run: |
sudo chown --recursive 1000:1000 dist/hydrus_client
sudo find dist/hydrus_client -type d -exec chmod 0755 {} \;
sudo chmod +x dist/hydrus_client/hydrus_client dist/hydrus_client/hydrus_server dist/hydrus_client/bin/swfrender_linux
-
name: Compress Client
run: |
mv dist/hydrus_client "dist/Hydrus Network"
tar -czvf Ubuntu-Extract.tar.gz -C dist "Hydrus Network"
-
name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
name: Ubuntu-Extract
path: Ubuntu-Extract.tar.gz
if-no-files-found: error
retention-days: 2
build-windows:
runs-on: windows-2019
steps:
-
name: Checkout
uses: actions/checkout@v3
with:
path: hydrus
-
name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
architecture: x64
-
name: Pip Install
run: python3 -m pip install -r hydrus/static/build_files/windows/requirements.txt
-
name: Build docs to /help
run: mkdocs build -d help
working-directory: hydrus
-
name: Download mpv-dev
uses: carlosperate/download-file-action@v2
id: download_mpv
with:
file-url: 'https://sourceforge.net/projects/mpv-player-windows/files/libmpv/mpv-dev-x86_64-20230212-git-a40958c.7z'
file-name: 'mpv-dev-x86_64.7z'
location: '.'
-
name: Process mpv-dev
run: |
7z x mpv-dev-x86_64.7z -ompv
move mpv\libmpv-2.dll hydrus\mpv-2.dll
-
name: Download ffmpeg
uses: carlosperate/download-file-action@v2
id: download_ffmpeg
with:
file-url: 'https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z'
file-name: 'ffmpeg-release-full.7z'
location: '.'
-
name: Process ffmpeg
run: |
7z e ffmpeg-release-full.7z -ohydrus/bin "**/bin/ffmpeg.exe"
-
name: Build Hydrus
run: |
move hydrus\static\build_files\windows\sqlite3.dll hydrus\
move hydrus\static\build_files\windows\sqlite3.exe hydrus\db
move hydrus\static\build_files\windows\file_version_info_maker.py file_version_info_maker.py
python file_version_info_maker.py ${{ github.ref_name }}
move hydrus\static\build_files\windows\hydrus_client.spec hydrus_client.spec
move hydrus\static\build_files\windows\hydrus_server.spec hydrus_server.spec
pyinstaller hydrus_server.spec
pyinstaller hydrus_client.spec
move dist\hydrus_client "dist\Hydrus Network"
-
# yo pretty sure we'll need to install this manually once we are on windows server 2022
# https://github.com/actions/virtual-environments/issues/4856
name: InnoSetup
run: |
move hydrus\static\build_files\windows\InnoSetup.iss InnoSetup.iss
ISCC.exe InnoSetup.iss /DVersion=${{ github.ref_name }}
-
name: Compress Client
run: |
cd .\dist
7z.exe a -tzip -mm=Deflate -mx=5 ..\Windows-Extract.zip 'Hydrus Network'
cd ..
-
name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
name: Windows-Install
path: dist\HydrusInstaller.exe
if-no-files-found: error
retention-days: 2
-
name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
name: Windows-Extract
path: Windows-Extract.zip
if-no-files-found: error
retention-days: 2
create-release:
name: Upload to Release
runs-on: ubuntu-20.04
needs: [build-windows, build-ubuntu, build-macos]
steps:
-
name: Get All Artifacts
uses: actions/download-artifact@v3
-
name: Extract Version Metadata
id: meta
run: |
echo "version=${GITHUB_REF##*/}" >> $GITHUB_ENV
echo "version_short=${GITHUB_REF##*/v}" >> $GITHUB_ENV
-
name: Rename Files
run: |
mkdir ubuntu windows
mv Windows-Install/HydrusInstaller.exe Hydrus.Network.${{ env.version_short }}.-.Windows.-.Installer.exe
mv Windows-Extract/Windows-Extract.zip Hydrus.Network.${{ env.version_short }}.-.Windows.-.Extract.only.zip
mv Ubuntu-Extract/Ubuntu-Extract.tar.gz Hydrus.Network.${{ env.version_short }}.-.Linux.-.Executable.tar.gz
mv MacOS-DMG/HydrusNetwork.dmg Hydrus.Network.${{ env.version_short }}.-.macOS.-.App.dmg
-
name: Upload Files
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
Hydrus.Network.${{ env.version_short }}.-.Windows.-.Installer.exe
Hydrus.Network.${{ env.version_short }}.-.Windows.-.Extract.only.zip
Hydrus.Network.${{ env.version_short }}.-.Linux.-.Executable.tar.gz
Hydrus.Network.${{ env.version_short }}.-.macOS.-.App.dmg