This repository has been archived by the owner on Nov 25, 2024. It is now read-only.
Build Application #26
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: Build Application | |
permissions: | |
contents: write | |
actions: write | |
checks: write | |
deployments: write | |
issues: write | |
packages: write | |
pull-requests: write | |
repository-projects: write | |
security-events: write | |
statuses: write | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-20.04, macos-12, windows-2019] | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
with: | |
python-version: '3.11' | |
- name: Install PyInstaller and Dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r requirements.txt | |
pip install pyinstaller | |
- name: Build with PyInstaller | |
run: | | |
pyinstaller crackle_viewer.spec | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ${{ runner.os }}-Executable | |
path: dist/* | |
- name: Create or Update Release | |
id: create_release | |
uses: actions/github-script@v5 | |
with: | |
script: | | |
const release = await github.rest.repos.getReleaseByTag({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag: 'latest-release' | |
}).catch(() => null); | |
let uploadUrl; | |
if (release) { | |
console.log(`Updating release: ${release.data.id}`); | |
const updatedRelease = await github.rest.repos.updateRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: release.data.id, | |
tag_name: 'latest-release', | |
name: 'Latest Release', | |
draft: false, | |
prerelease: false | |
}); | |
uploadUrl = updatedRelease.data.upload_url; | |
} else { | |
console.log('Creating new release'); | |
const newRelease = await github.rest.repos.createRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag_name: 'latest-release', | |
name: 'Latest Release', | |
draft: false, | |
prerelease: false | |
}); | |
uploadUrl = newRelease.data.upload_url; | |
} | |
core.setOutput('upload_url', uploadUrl); | |
// Delete existing assets if they exist | |
const assets = await github.rest.repos.listReleaseAssets({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: release ? release.data.id : newRelease.data.id, | |
}); | |
for (const asset of assets.data) { | |
if (asset.name === '${{ runner.os }}.zip') { | |
await github.rest.repos.deleteReleaseAsset({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
asset_id: asset.id | |
}); | |
console.log(`Deleted existing asset: ${asset.name}`); | |
} | |
} | |
- name: Zip Executable and Dependencies | |
shell: pwsh | |
run: | | |
$osType = "${{ runner.os }}" | |
if ($osType -eq "Windows") { | |
# PowerShell command for Windows | |
Compress-Archive -Path dist/* -DestinationPath "$osType-Executable.zip" | |
} else { | |
# Use PowerShell's native capabilities to handle Linux/macOS zipping if necessary | |
# Moving to a shell script file if needed | |
& bash -c "cd dist && zip -r ../$osType-Executable.zip ./* && cd .." | |
} | |
- name: Upload Release Asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ${{ runner.os }}-Executable.zip | |
asset_name: ${{ runner.os }}.zip | |
asset_content_type: application/zip |