Skip to content

Build Macast

Build Macast #1

Workflow file for this run

# Copyright (c) 2021 by xfangfang. All Rights Reserved.
name: Build Macast
on:
push:
branches:
- dev_test
- morelog
pull_request:
workflow_dispatch:
inputs:
ssh_darwin:
description: 'SSH connection to Darwin'
required: false
default: 'false'
ssh_ubuntu:
description: 'SSH connection to Ubuntu'
required: false
default: 'false'
release:
description: 'Push a new release'
required: false
default: 'false'
jobs:
release:
needs: [ build-nt, build-darwin, build-amd64, build-armv7 ]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: actions/download-artifact@v2
- name: Version
run: |
ls -R
export VERSION=`cat macast/.version`
echo "VERSION=v$VERSION" >> $GITHUB_ENV
echo "DIST_DMG=Macast-MacOS-v${VERSION}.dmg" >> $GITHUB_ENV
echo "DIST_EXE=Macast-Windows-v${VERSION}.exe" >> $GITHUB_ENV
echo "DIST_EXE_DEBUG=Macast-Windows-v${VERSION}-debug.exe" >> $GITHUB_ENV
echo "DIST_AMD64=Macast-Linux-v${VERSION}-amd64" >> $GITHUB_ENV
echo "DIST_AMD64_DEB=Macast-Linux-v${VERSION}-amd64.deb" >> $GITHUB_ENV
echo "DIST_ARMV7=Macast-Linux-v${VERSION}-armv7" >> $GITHUB_ENV
echo "DIST_ARMV7_DEB=Macast-Linux-v${VERSION}-armv7.deb" >> $GITHUB_ENV
echo $GITHUB_ENV
- name: Upload
if: github.event.inputs.release == 'true' && github.event.inputs.release != 'false' && !cancelled()
uses: ncipollo/release-action@v1
with:
name: Macast ${{ env.VERSION }}
tag: ${{ env.VERSION }}
omitBodyDuringUpdate: true
body: This release is built by github-action.
token: ${{ secrets.GITHUB_TOKEN }}
allowUpdates: true
artifacts: ${{ env.DIST_DMG }}/${{ env.DIST_DMG }},${{ env.DIST_EXE }}/${{ env.DIST_EXE }},${{ env.DIST_EXE_DEBUG }}/${{ env.DIST_EXE_DEBUG }},${{ env.DIST_AMD64 }}/${{ env.DIST_AMD64 }},${{ env.DIST_AMD64_DEB }}/${{ env.DIST_AMD64_DEB }},${{ env.DIST_ARMV7_DEB }}/${{ env.DIST_ARMV7_DEB }}
build-amd64:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Requirement
run: |
sudo apt update
sudo apt install -y gettext
docker pull xfangfang/build-macast
- name: Build
id: compile
run: |
for file in i18n/*; do msgfmt -o $file/LC_MESSAGES/macast.mo $file/LC_MESSAGES/macast.po;echo $file;done
export VERSION=`cat macast/.version`
export DIST_AMD64_DEB=Macast-Linux-v${VERSION}-amd64.deb
export DIST_AMD64=Macast-Linux-v${VERSION}-amd64
echo "DIST_AMD64_DEB=${DIST_AMD64_DEB}" >> $GITHUB_ENV
echo "DIST_AMD64=${DIST_AMD64}" >> $GITHUB_ENV
echo "VERSION=v$VERSION" >> $GITHUB_ENV
docker run --rm -v "$(pwd):/src/" xfangfang/build-macast \
'pip install -r requirements/common.txt && \
pip install -U pyinstaller && \
pyinstaller --noconfirm -F -w \
--additional-hooks-dir=. \
--add-data="macast/.version:." \
--add-data="macast/xml/*:macast/xml" \
--add-data="i18n/zh_CN/LC_MESSAGES/*.mo:i18n/zh_CN/LC_MESSAGES" \
--add-data="macast/assets/*:macast/assets" \
--add-data="macast/assets/fonts/*:macast/assets/fonts" \
--exclude-module=tkinter \
--distpath="app" \
Macast.py'
sudo chown 1000 app/Macast
cp app/Macast $DIST_AMD64
#build deb
mkdir -p dist/DEBIAN
mkdir -p dist/usr/bin
mkdir -p dist/usr/share/applications
mkdir -p dist/usr/share/icons
echo -e "Package: Macast\nVersion: ${VERSION}\nArchitecture: amd64\nMaintainer: xfangfang\nDescription: DLNA Media Renderer\nDepends: mpv" > dist/DEBIAN/control
echo -e "[Desktop Entry]\nName=Macast\nComment=DLNA Media Renderer\nExec=/usr/bin/macast\nIcon=/usr/share/icons/Macast.png\nTerminal=false\nType=Application\nCategories=Video" > dist/usr/share/applications/macast.desktop
cp app/Macast dist/usr/bin/macast
cp macast/assets/icon.png dist/usr/share/icons/Macast.png
dpkg -b dist $DIST_AMD64_DEB
echo "::set-output name=status::success"
- name: SSH connection to Actions
uses: P3TERX/[email protected]
if: (github.event.inputs.ssh_ubuntu == 'true' && github.event.inputs.ssh_ubuntu != 'false') || contains(github.event.action, 'ssh_ubuntu')
env:
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
- name: Upload dist linux x64
uses: actions/upload-artifact@v2
if: steps.compile.outputs.status == 'success'
with:
name: ${{ env.DIST_AMD64 }}
path: ${{ env.DIST_AMD64 }}
- name: Upload dist deb
uses: actions/upload-artifact@v2
if: steps.compile.outputs.status == 'success'
with:
name: ${{ env.DIST_AMD64_DEB }}
path: ${{ env.DIST_AMD64_DEB }}
build-nt:
runs-on: windows-2019
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Requirement
run: |
pip3 install -r requirements/common.txt
pip3 install pyinstaller
$client = new-object System.Net.WebClient
$client.DownloadFile('https://github.com/xfangfang/Macast/releases/download/v0.1/mpv-0.34.0-x86_64.7z','mpv.7z')
7z x -obin mpv.7z *.exe
$client.DownloadFile('https://github.com/xfangfang/Macast/releases/download/v0.1/gettext0.21-iconv1.16-static-64.zip','gettext.zip')
7z x -ogettext gettext.zip bin/msgfmt.exe
- name: Build
id: compile
run: |
Get-ChildItem i18n | ForEach-Object -Process{gettext/bin/msgfmt -o $_/LC_MESSAGES/macast.mo $_/LC_MESSAGES/macast.po;echo $_.name}
$VERSION=cat macast/.version
echo "DIST_EXE=Macast-Windows-v${VERSION}.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "DIST_EXE_DEBUG=Macast-Windows-v${VERSION}-debug.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "VERSION=v${VERSION}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
pyinstaller --noconfirm -F -w --additional-hooks-dir=. --add-data="macast/.version;." --add-data="macast/xml/*;macast/xml" --add-data="i18n/zh_CN/LC_MESSAGES/*.mo;i18n/zh_CN/LC_MESSAGES" --add-data="macast/assets/*;macast/assets" --add-data="macast/assets/fonts/*;macast/assets/fonts" --add-binary="bin/mpv.exe;bin" --icon=macast/assets/icon.ico Macast.py
cp dist/Macast.exe Macast-Windows-v${VERSION}.exe
pyinstaller --noconfirm -F --additional-hooks-dir=. --add-data="macast/.version;." --add-data="macast/xml/*;macast/xml" --add-data="i18n/zh_CN/LC_MESSAGES/*.mo;i18n/zh_CN/LC_MESSAGES" --add-data="macast/assets/*;macast/assets" --add-data="macast/assets/fonts/*;macast/assets/fonts" --add-binary="bin/mpv.exe;bin" --icon=macast/assets/icon.ico Macast.py
cp dist/Macast.exe Macast-Windows-v${VERSION}-debug.exe
echo "::set-output name=status::success"
- name: Upload dist
uses: actions/upload-artifact@v2
if: steps.compile.outputs.status == 'success'
with:
name: ${{ env.DIST_EXE }}
path: ${{ env.DIST_EXE }}
- name: Upload dist debug
uses: actions/upload-artifact@v2
if: steps.compile.outputs.status == 'success'
with:
name: ${{ env.DIST_EXE_DEBUG }}
path: ${{ env.DIST_EXE_DEBUG }}
build-darwin:
runs-on: macos-11
steps:
- name: Checkout
uses: actions/checkout@v2
- name: install create-dmg
run: brew install create-dmg
- name: install universal python
run: |
wget https://www.python.org/ftp/python/3.9.8/python-3.9.8-macos11.pkg
sudo installer -pkg python-3.9.8-macos11.pkg -target /
- name: Install Requirement
run: |
pip3 install -r requirements/darwin.txt
pip3 install py2app
wget https://laboratory.stolendata.net/~djinn/mpv_osx/mpv-latest.tar.gz
mkdir -p bin && tar --strip-components 2 -C bin -xzvf mpv-latest.tar.gz mpv.app/Contents/MacOS
- name: Build
id: compile
run: |
for file in i18n/*; do msgfmt -o $file/LC_MESSAGES/macast.mo $file/LC_MESSAGES/macast.po;echo $file;done
python3 setup_py2app.py py2app --arch=x86_64
cp -R bin dist/Macast.app/Contents/Resources/
export VERSION=`cat macast/.version`
echo "DIST_DMG=Macast-MacOS-v${VERSION}.dmg" >> $GITHUB_ENV
echo "VERSION=v$VERSION" >> $GITHUB_ENV
create-dmg --window-pos 200 120 --window-size 800 400 --icon-size 100 --icon "Macast.app" 200 190 --hide-extension "Macast.app" --app-drop-link 600 185 --volname "Macast-v${VERSION} Installer" Macast-MacOS-v${VERSION}.dmg "dist/"
echo "::set-output name=status::success"
- name: SSH connection to Actions
uses: P3TERX/[email protected]
if: (github.event.inputs.ssh_darwin == 'true' && github.event.inputs.ssh_darwin != 'false') || contains(github.event.action, 'ssh_darwin')
env:
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
- name: Upload dist
uses: actions/upload-artifact@v2
if: steps.compile.outputs.status == 'success'
with:
name: ${{ env.DIST_DMG }}
path: ${{ env.DIST_DMG }}
build-armv7:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Requirement
run: |
sudo apt update
sudo apt install -y gettext
docker pull xfangfang/build-macast
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
- name: Build
id: compile
run: |
for file in i18n/*; do msgfmt -o $file/LC_MESSAGES/macast.mo $file/LC_MESSAGES/macast.po;echo $file;done
export VERSION=`cat macast/.version`
export BUILD_PLATFORM=armv7
export DIST_DEB=Macast-Linux-v${VERSION}-${BUILD_PLATFORM}.deb
export DIST=Macast-Linux-v${VERSION}-${BUILD_PLATFORM}
echo "DIST_DEB=${DIST_DEB}" >> $GITHUB_ENV
echo "DIST=${DIST}" >> $GITHUB_ENV
echo "VERSION=v$VERSION" >> $GITHUB_ENV
docker run --platform=linux/arm/v7 --rm -v "$(pwd):/src/" xfangfang/build-macast:armv7-220105 \
'pyinstaller --noconfirm -F -w \
--additional-hooks-dir=. \
--add-data="macast/.version:." \
--add-data="macast/xml/*:macast/xml" \
--add-data="i18n/zh_CN/LC_MESSAGES/*.mo:i18n/zh_CN/LC_MESSAGES" \
--add-data="macast/assets/*.png:assets" \
--exclude-module=tkinter \
--distpath="app" \
Macast.py'
sudo chown 1000 app/Macast
cp app/Macast $DIST
#build deb
mkdir -p dist/DEBIAN
mkdir -p dist/usr/bin
mkdir -p dist/usr/share/applications
mkdir -p dist/usr/share/icons
echo -e "Package: Macast\nVersion: ${VERSION}\nArchitecture: armhf\nMaintainer: xfangfang\nDescription: DLNA Media Renderer\nDepends: mpv" > dist/DEBIAN/control
echo -e "[Desktop Entry]\nName=Macast\nComment=DLNA Media Renderer\nExec=/usr/bin/macast\nIcon=/usr/share/icons/Macast.png\nTerminal=false\nType=Application\nCategories=Video" > dist/usr/share/applications/macast.desktop
cp app/Macast dist/usr/bin/macast
cp macast/assets/icon.png dist/usr/share/icons/Macast.png
dpkg -b dist $DIST_DEB
echo "::set-output name=status::success"
- name: Upload dist linux
uses: actions/upload-artifact@v2
if: steps.compile.outputs.status == 'success'
with:
name: ${{ env.DIST }}
path: ${{ env.DIST }}
- name: Upload dist deb
uses: actions/upload-artifact@v2
if: steps.compile.outputs.status == 'success'
with:
name: ${{ env.DIST_DEB }}
path: ${{ env.DIST_DEB }}