fix: streamline build process by executing PyInstaller from project r… #19
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Create Tag and Release | |
on: | |
pull_request: | |
types: [closed, synchronize] | |
branches: | |
- main | |
- 1.2.0-release-2 | |
concurrency: | |
group: create-tag-and-release-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
# Job 1: Validate the PR and extract version | |
validate_and_tag: | |
# if: github.event.pull_request.merged == true | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.validate_title.outputs.version }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
token: ${{ secrets.PAT_TOKEN }} | |
- name: Validate branch name and extract version | |
id: validate_title | |
run: | | |
branch_name="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" | |
echo "Branch name: $branch_name" | |
echo '1' $GITHUB_REF | |
echo '2' $GITHUB_REF | |
echo '3' $GITHUB_REF_NAME | |
echo '4' $GITHUB_HEAD_REF | |
echo '5' $GITHUB_BASE_REF | |
if [[ "$branch_name" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9-]+)?$ ]]; then | |
version=$(echo "$branch_name" | grep -oE '^v[0-9]+\.[0-9]+\.[0-9]+') | |
echo "version=$version" >> "$GITHUB_OUTPUT" | |
echo "Matched version: $version" | |
else | |
echo "Branch name does not match the required format (vX.X.X or vX.X.X-suffix)." | |
exit 1 # Exit with failure | |
fi | |
shell: bash | |
- name: Create a tag | |
if: ${{ steps.validate_title.outputs.version != '' }} | |
run: | | |
version=${{ steps.validate_title.outputs.version }} | |
# 检查本地是否存在该 Tag | |
tag_exists=$(git tag -l "$version") | |
if [ -z "$tag_exists" ]; then | |
# 本地不存在该 Tag,创建 Tag | |
git tag "$version" | |
# 检查远程是否存在该 Tag | |
remote_tag_exists=$(git ls-remote --tags origin | grep "refs/tags/$version" || true) | |
if [ -z "$remote_tag_exists" ]; then | |
# 如果远程也不存在,推送 Tag | |
git push origin "$version" | |
echo "Tag $version created and pushed successfully." | |
else | |
echo "Tag $version already exists in remote. Skipping push." | |
fi | |
else | |
echo "Tag $version already exists locally. Skipping tag creation and push." | |
fi | |
shell: bash | |
# Job 2: Compile using matrix for different platforms | |
compile: | |
needs: validate_and_tag | |
if: ${{ needs.validate_and_tag.outputs.version != '' }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
include: | |
- os: ubuntu-latest | |
python-version: "3.x" | |
- os: windows-latest | |
python-version: "3.x" | |
architecture: "x64" | |
- os: macos-latest | |
python-version: "3.x" | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v3 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: ${{ matrix.architecture || '' }} | |
- name: Install Dependencies | |
if: runner.os != 'Windows' | |
run: | | |
if [ -f requirements.txt ]; then | |
pip install -r requirements.txt | |
fi | |
shell: bash | |
- name: Install Dependencies (Windows) | |
if: runner.os == 'Windows' | |
run: | | |
if (Test-Path -Path requirements.txt) { | |
pip install -r requirements.txt | |
} | |
shell: pwsh | |
- name: Install PyInstaller | |
run: | | |
pip install pyinstaller | |
- name: Compile for Linux and macOS | |
if: runner.os != 'Windows' | |
run: | | |
# 直接在项目根目录下执行 PyInstaller | |
pyinstaller --onefile $GITHUB_WORKSPACE/sub_adjust.py | |
pyinstaller --onefile $GITHUB_WORKSPACE/sub_converter.py | |
# 找到当前工作目录 | |
current_dir=$GITHUB_WORKSPACE | |
echo "Current directory: $current_dir" | |
# 假设工作目录为 /home/runner/work/sub-adjust/sub-adjust/ | |
# dist 文件夹应位于 ${current_dir}/dist | |
# 移动编译后的文件到对应的 build 目录 | |
if [ "${{ matrix.os }}" == "ubuntu-latest" ]; then | |
mkdir -p $GITHUB_WORKSPACE/build/linux | |
if [ -f "$GITHUB_WORKSPACE/dist/sub_adjust" ]; then | |
mv "$GITHUB_WORKSPACE/dist/sub_adjust" "$GITHUB_WORKSPACE/build/linux/" | |
else | |
echo "Error: sub_adjust not found in dist/ after PyInstaller run." | |
fi | |
if [ -f "$GITHUB_WORKSPACE/dist/sub_converter" ]; then | |
mv "$GITHUB_WORKSPACE/dist/sub_converter" "$GITHUB_WORKSPACE/build/linux/" | |
else | |
echo "Error: sub_converter not found in dist/ after PyInstaller run." | |
fi | |
elif [ "${{ matrix.os }}" == "macos-latest" ]; then | |
mkdir -p $GITHUB_WORKSPACE/build/macos | |
if [ -f "$GITHUB_WORKSPACE/dist/sub_adjust" ]; then | |
mv "$GITHUB_WORKSPACE/dist/sub_adjust" "$GITHUB_WORKSPACE/build/macos/" | |
else | |
echo "Error: sub_adjust not found in dist/ after PyInstaller run." | |
fi | |
if [ -f "$GITHUB_WORKSPACE/dist/sub_converter" ]; then | |
mv "$GITHUB_WORKSPACE/dist/sub_converter" "$GITHUB_WORKSPACE/build/macos/" | |
else | |
echo "Error: sub_converter not found in dist/ after PyInstaller run." | |
fi | |
fi | |
shell: bash | |
- name: Compile for Windows | |
if: runner.os == 'Windows' | |
run: | | |
# 直接在项目根目录下执行 PyInstaller | |
pyinstaller --onefile $env:GITHUB_WORKSPACE\sub_adjust.py | |
pyinstaller --onefile $env:GITHUB_WORKSPACE\sub_converter.py | |
# 确保存在 build/windows 目录并移动编译后的文件 | |
mkdir -p $env:GITHUB_WORKSPACE\build\windows | |
if (Test-Path "$env:GITHUB_WORKSPACE\dist\sub_adjust.exe") { | |
Move-Item "$env:GITHUB_WORKSPACE\dist\sub_adjust.exe" "$env:GITHUB_WORKSPACE\build\windows\" | |
} | |
else { | |
Write-Output "Error: sub_adjust.exe not found in dist/ after PyInstaller run." | |
} | |
if (Test-Path "$env:GITHUB_WORKSPACE\dist\sub_converter.exe") { | |
Move-Item "$env:GITHUB_WORKSPACE\dist\sub_converter.exe" "$env:GITHUB_WORKSPACE\build\windows\" | |
} | |
else { | |
Write-Output "Error: sub_converter.exe not found in dist/ after PyInstaller run." | |
} | |
shell: pwsh | |
# Job 3: Create release | |
create_release: | |
needs: [validate_and_tag, compile] | |
if: ${{ needs.validate_and_tag.outputs.version != '' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
# Tar Linux binaries | |
- name: Tar Linux binaries | |
if: runner.os == 'Linux' | |
run: | | |
echo "Finding all generated binaries in the workspace:" | |
find "$GITHUB_WORKSPACE" -type f -name "sub_adjust" -o -name "sub_converter" | |
# 确保存在 build 目录,并移动编译后的文件 | |
mkdir -p "$GITHUB_WORKSPACE/build/linux" | |
# 查找编译后的文件路径并移动 | |
adjust_binary=$(find "$GITHUB_WORKSPACE" -type f -name "sub_adjust" | head -n 1) | |
converter_binary=$(find "$GITHUB_WORKSPACE" -type f -name "sub_converter" | head -n 1) | |
if [ -z "$adjust_binary" ]; then | |
echo "Error: sub_adjust binary not found in workspace" | |
exit 1 | |
fi | |
if [ -z "$converter_binary" ]; then | |
echo "Error: sub_converter binary not found in workspace" | |
exit 1 | |
fi | |
echo "Moving sub_adjust to build directory: $adjust_binary" | |
mv "$adjust_binary" "$GITHUB_WORKSPACE/build/linux/" | |
echo "Moving sub_converter to build directory: $converter_binary" | |
mv "$converter_binary" "$GITHUB_WORKSPACE/build/linux/" | |
echo "Creating tarball for Linux binaries." | |
tar -czvf "$GITHUB_WORKSPACE/sub_adjust-${{ needs.validate_and_tag.outputs.version }}-linux-x64.tar.gz" -C "$GITHUB_WORKSPACE/build/linux" . | |
# Tar macOS binaries | |
- name: Tar macOS binaries | |
if: runner.os == 'macOS' | |
run: | | |
echo "Finding all generated binaries in the workspace:" | |
find "$GITHUB_WORKSPACE" -type f -name "sub_adjust" -o -name "sub_converter" | |
# 确保存在 build 目录,并移动编译后的文件 | |
mkdir -p "$GITHUB_WORKSPACE/build/macos" | |
# 查找编译后的文件路径并移动 | |
adjust_binary=$(find "$GITHUB_WORKSPACE" -type f -name "sub_adjust" | head -n 1) | |
converter_binary=$(find "$GITHUB_WORKSPACE" -type f -name "sub_converter" | head -n 1) | |
if [ -z "$adjust_binary" ]; then | |
echo "Error: sub_adjust binary not found in workspace" | |
exit 1 | |
fi | |
if [ -z "$converter_binary" ]; then | |
echo "Error: sub_converter binary not found in workspace" | |
exit 1 | |
fi | |
echo "Moving sub_adjust to build directory: $adjust_binary" | |
mv "$adjust_binary" "$GITHUB_WORKSPACE/build/macos/" | |
echo "Moving sub_converter to build directory: $converter_binary" | |
mv "$converter_binary" "$GITHUB_WORKSPACE/build/macos/" | |
echo "Creating tarball for macOS binaries." | |
tar -czvf "$GITHUB_WORKSPACE/sub_adjust-${{ needs.validate_and_tag.outputs.version }}-macos-x64.tar.gz" -C "$GITHUB_WORKSPACE/build/macos" . | |
# Zip Windows binaries | |
- name: Zip Windows binaries | |
if: runner.os == 'Windows' | |
run: | | |
# 查找 Windows 编译结果 | |
Write-Output "Finding all generated binaries in the workspace:" | |
Get-ChildItem -Path "$env:GITHUB_WORKSPACE" -Recurse -Filter "sub_adjust.exe", "sub_converter.exe" | |
# 查找编译后的文件路径 | |
$adjustBinary = Get-ChildItem -Path "$env:GITHUB_WORKSPACE" -Recurse -Filter "sub_adjust.exe" | Select-Object -First 1 | |
$converterBinary = Get-ChildItem -Path "$env:GITHUB_WORKSPACE" -Recurse -Filter "sub_converter.exe" | Select-Object -First 1 | |
if (-not $adjustBinary) { | |
Write-Output "Error: sub_adjust.exe binary not found in workspace" | |
exit 1 | |
} | |
if (-not $converterBinary) { | |
Write-Output "Error: sub_converter.exe binary not found in workspace" | |
exit 1 | |
} | |
# 确保存在 build/windows 目录并移动编译后的文件 | |
mkdir -p "$env:GITHUB_WORKSPACE\build\windows" | |
Move-Item -Path $adjustBinary.FullName -Destination "$env:GITHUB_WORKSPACE\build\windows\" | |
Move-Item -Path $converterBinary.FullName -Destination "$env:GITHUB_WORKSPACE\build\windows\" | |
# 打包 Windows 二进制文件 | |
Write-Output "Creating zip file for Windows binaries." | |
Compress-Archive -Path "$env:GITHUB_WORKSPACE\build\windows\*" -DestinationPath "$env:GITHUB_WORKSPACE\sub_adjust-${{ needs.validate_and_tag.outputs.version }}-win-x64.zip" | |
shell: pwsh | |
# Create GitHub release | |
- name: Create GitHub release | |
id: create_release_step | |
uses: actions/create-release@v1 | |
with: | |
tag_name: ${{ needs.validate_and_tag.outputs.version }} | |
release_name: Release ${{ needs.validate_and_tag.outputs.version }} | |
body: | | |
Automatically created release for version ${{ needs.validate_and_tag.outputs.version }}. | |
### PR Description: | |
${{ github.event.pull_request.body }} | |
draft: false | |
prerelease: false | |
- name: Upload Linux binaries tar.gz file to release | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: ${{ steps.create_release_step.outputs.upload_url }} | |
asset_path: "$GITHUB_WORKSPACE/sub_adjust-${{ needs.validate_and_tag.outputs.version }}-linux-x64.tar.gz" | |
asset_name: "sub_adjust-${{ needs.validate_and_tag.outputs.version }}-linux-x64.tar.gz" | |
asset_content_type: application/gzip | |
- name: Upload macOS binaries tar.gz file to release | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: ${{ steps.create_release_step.outputs.upload_url }} | |
asset_path: "$GITHUB_WORKSPACE/sub_adjust-${{ needs.validate_and_tag.outputs.version }}-macos-x64.tar.gz" | |
asset_name: "sub_adjust-${{ needs.validate_and_tag.outputs.version }}-macos-x64.tar.gz" | |
asset_content_type: application/gzip | |
- name: Upload Windows binaries zip file to release | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: ${{ steps.create_release_step.outputs.upload_url }} | |
asset_path: "$GITHUB_WORKSPACE/sub_adjust-${{ needs.validate_and_tag.outputs.version }}-win-x64.zip" | |
asset_name: "sub_adjust-${{ needs.validate_and_tag.outputs.version }}-win-x64.zip" | |
asset_content_type: application/zip | |
# Upload source zip file to release | |
- name: Upload source zip file to release | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: ${{ steps.create_release_step.outputs.upload_url }} | |
asset_path: ./sub_adjust-${{ needs.validate_and_tag.outputs.version }}-source.zip | |
asset_name: sub_adjust-${{ needs.validate_and_tag.outputs.version }}-source.zip | |
asset_content_type: application/zip |