Skip to content

修复Windows构建:使用PowerShell语法替代bash #4

修复Windows构建:使用PowerShell语法替代bash

修复Windows构建:使用PowerShell语法替代bash #4

Workflow file for this run

name: Build and Release
on:
push:
branches: [ main, master ]
tags:
- 'v*'
pull_request:
branches: [ main, master ]
workflow_dispatch:
jobs:
build-windows:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -r requirements.txt
- name: Build Windows executable
run: |
pyinstaller --onefile --windowed --icon=icon.ico --name AssignSticker main.py
- name: Prepare Windows package
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path release/AssignSticker-windows
Copy-Item -Recurse dist/AssignSticker.exe release/AssignSticker-windows/
Copy-Item -Recurse icons release/AssignSticker-windows/
Copy-Item -Recurse htmls release/AssignSticker-windows/
Copy-Item -Recurse saying release/AssignSticker-windows/
Copy-Item -Recurse desktop_widgets release/AssignSticker-windows/
Copy-Item font.ttf release/AssignSticker-windows/
Copy-Item icon.ico release/AssignSticker-windows/
Copy-Item introduce release/AssignSticker-windows/
if (Test-Path banner.png) { Copy-Item banner.png release/AssignSticker-windows/ } else { Write-Host "banner.png not found" }
if (Test-Path LICENSE) { Copy-Item LICENSE release/AssignSticker-windows/ } else { Write-Host "LICENSE not found" }
if (Test-Path README.md) { Copy-Item README.md release/AssignSticker-windows/ } else { Write-Host "README.md not found" }
- name: Create Windows ZIP
run: |
cd release
7z a AssignSticker-windows-x64.zip AssignSticker-windows
- name: Upload Windows artifact
uses: actions/upload-artifact@v4
with:
name: AssignSticker-windows-x64
path: release/AssignSticker-windows-x64.zip
build-linux-amd64:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -r requirements.txt
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y dpkg-dev debhelper fakeroot
- name: Build Linux executable
run: |
pyinstaller --onefile --windowed --name assignsticker main.py
- name: Prepare DEB package
run: |
mkdir -p release/deb/assignsticker-amd64/usr/local/bin
mkdir -p release/deb/assignsticker-amd64/usr/share/assignsticker
mkdir -p release/deb/assignsticker-amd64/usr/share/applications
mkdir -p release/deb/assignsticker-amd64/DEBIAN
# Copy executable
cp dist/assignsticker release/deb/assignsticker-amd64/usr/local/bin/
chmod +x release/deb/assignsticker-amd64/usr/local/bin/assignsticker
# Copy application files
cp -r icons release/deb/assignsticker-amd64/usr/share/assignsticker/
cp -r htmls release/deb/assignsticker-amd64/usr/share/assignsticker/
cp -r saying release/deb/assignsticker-amd64/usr/share/assignsticker/
cp -r desktop_widgets release/deb/assignsticker-amd64/usr/share/assignsticker/
cp font.ttf release/deb/assignsticker-amd64/usr/share/assignsticker/
cp icon.ico release/deb/assignsticker-amd64/usr/share/assignsticker/
cp introduce release/deb/assignsticker-amd64/usr/share/assignsticker/
cp banner.png release/deb/assignsticker-amd64/usr/share/assignsticker/ 2>/dev/null || true
cp LICENSE release/deb/assignsticker-amd64/usr/share/assignsticker/ 2>/dev/null || true
cp README.md release/deb/assignsticker-amd64/usr/share/assignsticker/ 2>/dev/null || true
# Create desktop entry
echo "[Desktop Entry]" > release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
echo "Name=AssignSticker" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
echo "Comment=作业看板应用" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
echo "Exec=/usr/local/bin/assignsticker" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
echo "Icon=/usr/share/assignsticker/icon.ico" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
echo "Type=Application" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
echo "Categories=Education;Office;" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
echo "Terminal=false" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
# Create control file
echo "Package: assignsticker" > release/deb/assignsticker-amd64/DEBIAN/control
echo "Version: 1.3.0" >> release/deb/assignsticker-amd64/DEBIAN/control
echo "Section: education" >> release/deb/assignsticker-amd64/DEBIAN/control
echo "Priority: optional" >> release/deb/assignsticker-amd64/DEBIAN/control
echo "Architecture: amd64" >> release/deb/assignsticker-amd64/DEBIAN/control
echo "Depends: python3, python3-gi, libgtk-3-0" >> release/deb/assignsticker-amd64/DEBIAN/control
echo "Maintainer: SECTL <your-email@example.com>" >> release/deb/assignsticker-amd64/DEBIAN/control
echo "Description: 作业看板应用" >> release/deb/assignsticker-amd64/DEBIAN/control
echo " AssignSticker 是一个用于管理作业的看板应用," >> release/deb/assignsticker-amd64/DEBIAN/control
echo " 帮助用户更好地组织和跟踪作业任务。" >> release/deb/assignsticker-amd64/DEBIAN/control
# Build DEB package
dpkg-deb --build release/deb/assignsticker-amd64
mv release/deb/assignsticker-amd64.deb release/AssignSticker-linux-amd64.deb
- name: Upload Linux AMD64 artifact
uses: actions/upload-artifact@v4
with:
name: AssignSticker-linux-amd64
path: release/AssignSticker-linux-amd64.deb
build-linux-arm64:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Build ARM64 in container
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/arm64
file: ./Dockerfile.build
push: false
outputs: type=local,dest=./release/arm64
- name: Prepare ARM64 DEB package
run: |
mkdir -p release/deb/assignsticker-arm64/usr/local/bin
mkdir -p release/deb/assignsticker-arm64/usr/share/assignsticker
mkdir -p release/deb/assignsticker-arm64/usr/share/applications
mkdir -p release/deb/assignsticker-arm64/DEBIAN
# Copy executable
cp release/arm64/assignsticker release/deb/assignsticker-arm64/usr/local/bin/ 2>/dev/null || echo "Using placeholder"
chmod +x release/deb/assignsticker-arm64/usr/local/bin/assignsticker 2>/dev/null || true
# Copy application files
cp -r icons release/deb/assignsticker-arm64/usr/share/assignsticker/
cp -r htmls release/deb/assignsticker-arm64/usr/share/assignsticker/
cp -r saying release/deb/assignsticker-arm64/usr/share/assignsticker/
cp -r desktop_widgets release/deb/assignsticker-arm64/usr/share/assignsticker/
cp font.ttf release/deb/assignsticker-arm64/usr/share/assignsticker/
cp icon.ico release/deb/assignsticker-arm64/usr/share/assignsticker/
cp introduce release/deb/assignsticker-arm64/usr/share/assignsticker/
cp banner.png release/deb/assignsticker-arm64/usr/share/assignsticker/ 2>/dev/null || true
cp LICENSE release/deb/assignsticker-arm64/usr/share/assignsticker/ 2>/dev/null || true
cp README.md release/deb/assignsticker-arm64/usr/share/assignsticker/ 2>/dev/null || true
# Create desktop entry
echo "[Desktop Entry]" > release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
echo "Name=AssignSticker" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
echo "Comment=作业看板应用" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
echo "Exec=/usr/local/bin/assignsticker" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
echo "Icon=/usr/share/assignsticker/icon.ico" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
echo "Type=Application" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
echo "Categories=Education;Office;" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
echo "Terminal=false" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
# Create control file
echo "Package: assignsticker" > release/deb/assignsticker-arm64/DEBIAN/control
echo "Version: 1.3.0" >> release/deb/assignsticker-arm64/DEBIAN/control
echo "Section: education" >> release/deb/assignsticker-arm64/DEBIAN/control
echo "Priority: optional" >> release/deb/assignsticker-arm64/DEBIAN/control
echo "Architecture: arm64" >> release/deb/assignsticker-arm64/DEBIAN/control
echo "Depends: python3, python3-gi, libgtk-3-0" >> release/deb/assignsticker-arm64/DEBIAN/control
echo "Maintainer: SECTL <your-email@example.com>" >> release/deb/assignsticker-arm64/DEBIAN/control
echo "Description: 作业看板应用" >> release/deb/assignsticker-arm64/DEBIAN/control
echo " AssignSticker 是一个用于管理作业的看板应用," >> release/deb/assignsticker-arm64/DEBIAN/control
echo " 帮助用户更好地组织和跟踪作业任务。" >> release/deb/assignsticker-arm64/DEBIAN/control
# Build DEB package
dpkg-deb --build release/deb/assignsticker-arm64
mv release/deb/assignsticker-arm64.deb release/AssignSticker-linux-arm64.deb
- name: Upload Linux ARM64 artifact
uses: actions/upload-artifact@v4
with:
name: AssignSticker-linux-arm64
path: release/AssignSticker-linux-arm64.deb
release:
needs: [build-windows, build-linux-amd64, build-linux-arm64]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: |
artifacts/AssignSticker-windows-x64/*.zip
artifacts/AssignSticker-linux-amd64/*.deb
artifacts/AssignSticker-linux-arm64/*.deb
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}