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