Skip to content

fix: 构建加log

fix: 构建加log #188

Workflow file for this run

name: Publish VS Code Extension
on:
push:
branches: [ "main" ] # 主分支推送时触发
workflow_dispatch: # 允许手动触发
jobs:
build-python-exe:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2 # Fetch previous commit for hash comparison
# Calculate SHA256 and check if build is needed
- name: Check if build is needed
id: sha256
run: |
Set-PSDebug -Trace 1
try {
$sha256 = (Get-FileHash -Path src/python/rag.py -Algorithm SHA256).Hash
echo "Current SHA256: $sha256"
$previous_sha256 = "${{ github.event.before }}"
echo "Previous SHA256: $previous_sha256"
if ($previous_sha256 -and $previous_sha256 -ne "0000000000000000000000000000000000000000") {
$rag_path = "src/python/rag.py" -replace '\\', '/'
echo "Checking if $rag_path exists in $previous_sha256"
$file_exists = git cat-file -e "$previous_sha256:$rag_path" 2>$null
$check_exit_code = $LASTEXITCODE
if ($check_exit_code -eq 0) {
$previous_content = git show "$previous_sha256:$rag_path" -- 2>&1
$git_exit_code = $LASTEXITCODE
$LASTEXITCODE = 0
echo "Git show exit code: $git_exit_code"
echo "Git show output: $previous_content"
if ($previous_content -and $git_exit_code -eq 0) {
$tempFile = Join-Path $PWD "temp_rag.py"
echo $previous_content | Out-File $tempFile -Encoding utf8NoBOM
if (Test-Path $tempFile) {
$previous_hash = (Get-FileHash -Path $tempFile -Algorithm SHA256).Hash
echo "Previous SHA256: $previous_hash"
if ($previous_hash -eq $sha256) {
echo "No changes detected in rag.py, skipping build and release."
exit 0
} else {
echo "Hash mismatch, proceeding with build."
}
} else {
echo "Failed to create temp_rag.py"
}
} else {
echo "Failed to retrieve previous content, proceeding with build."
}
} else {
echo "src/python/rag.py does not exist in commit $previous_sha256, proceeding with build."
}
} else {
echo "No valid previous SHA, proceeding with build."
}
echo "Building new rag.exe due to changes or no previous commit."
} catch {
echo "Error in hash comparison: $_"
exit 1
} finally {
Remove-Item -Path temp_rag.py -Force -ErrorAction SilentlyContinue
}
shell: pwsh
# Set up Python
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
# Install PyInstaller
- name: Install PyInstaller
run: pip install pyinstaller
# Install Python dependencies
- name: Install Python dependencies
run: pip install -r src/python/requirements.txt
# Build EXE to a temporary directory
- name: Build EXE
run: |
mkdir temp_dist
pyinstaller --onefile --clean --distpath temp_dist src/python/rag.py
if ($LASTEXITCODE -ne 0) { throw "PyInstaller build failed" }
shell: pwsh
# Compress EXE with UPX
- name: Compress EXE with UPX
uses: crazy-max/ghaction-upx@v3
with:
version: latest
files: |
temp_dist/rag.exe
args: -fq --best
# Generate MD5 checksum
- name: Generate MD5 checksum
run: |
$md5 = (Get-FileHash -Path temp_dist/rag.exe -Algorithm MD5).Hash
echo $md5.ToLower() > temp_dist/md5.txt
shell: pwsh
- name: Delete old Release
run: |
gh release view latest --json url 2>$null
$releaseExists = ($LASTEXITCODE -eq 0)
if ($releaseExists) {
gh release delete latest --yes
} else {
Write-Host "Release 'latest' does not exist, skipping deletion."
}
exit 0
shell: pwsh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release
uses: softprops/action-gh-release@v2
with:
files: |
temp_dist/rag.exe
temp_dist/md5.txt
tag_name: latest
name: Latest RAG Executable
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Clean up temporary directory
- name: Clean up temporary directory
if: always()
run: |
Remove-Item -Path temp_dist -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path temp_rag.py -Force -ErrorAction SilentlyContinue
shell: pwsh
build-and-publish:
runs-on: ubuntu-latest
needs: build-python-exe
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download md5.txt from GitHub Release
run: |
mkdir -p dist
curl -L -o dist/md5.txt https://github.com/yefansky/CodeReDesign/releases/download/latest/md5.txt
echo "Downloaded md5.txt from release"
shell: bash
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install Dependencies
run: npm install
- name: Install standard-version
run: npm install --save-dev standard-version
- name: Install vsce
run: npm install -g @vscode/vsce
- name: Set Git user name and email
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "[email protected]"
- name: Run standard-version
run: npx standard-version # 自动更新版本号
- name: Push changes and tags
run: |
git push --follow-tags
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get metadata from package.json
id: metadata
run: |
NAME=$(node -p "require('./package.json').name")
VERSION=$(node -p "require('./package.json').version")
echo "NAME=$NAME" >> $GITHUB_ENV
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: Package Extension
run: vsce package # 使用默认文件名 CodeReDesign-<version>.vsix
- name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ env.VERSION }}
release_name: Release v${{ env.VERSION }}
draft: false
prerelease: false
body: |
Auto-generated release for version ${{ env.VERSION }}.
Download the VSIX file below to install the extension.
- name: Upload VSIX to Release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ env.NAME }}-${{ env.VERSION }}.vsix
asset_name: ${{ env.NAME }}-${{ env.VERSION }}.vsix
asset_content_type: application/zip
- name: Publish to Marketplace
uses: HaaLeo/[email protected] # 第三方 Action 简化发布
with:
pat: ${{ secrets.SHELLING }} # 引用 GitHub Secret
registryUrl: https://marketplace.visualstudio.com
skipDuplicate: true # 忽略重复版本错误