Build Executables #34
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 Executables | |
on: | |
workflow_dispatch: | |
inputs: | |
release_version: | |
description: 'Release Version' | |
required: true | |
default: '' | |
type: string | |
permissions: write-all | |
jobs: | |
build-linux: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Install Dependencies | |
run: pip install -r requirements.txt | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.9' | |
- name: Install PyInstaller | |
run: pip install pyinstaller | |
- name: Build executable for Linux | |
run: | | |
pyinstaller --onefile commitify.py | |
- name: Move Linux executable | |
run: | | |
mv dist/commitify ./commitify-linux | |
- name: Upload Linux artifact | |
uses: actions/upload-artifact@v4 # Use v4 | |
with: | |
name: linux-executable | |
path: commitify-linux # Ensure this matches the moved file's name | |
build-windows: | |
runs-on: windows-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.9' | |
- name: Install Dependencies | |
run: pip install -r requirements.txt | |
- name: Install PyInstaller | |
run: pip install pyinstaller | |
- name: Build executable for Windows | |
run: | | |
pyinstaller --onefile commitify.py | |
- name: Move Windows executable | |
run: | | |
move dist\commitify.exe commitify.exe # Just rename to commitify.exe | |
- name: Upload Windows artifact | |
uses: actions/upload-artifact@v4 # Use v4 | |
with: | |
name: windows-executable | |
path: commitify.exe # Ensure this matches the moved file's name | |
build-macos: | |
runs-on: macos-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.9' | |
- name: Install PyInstaller | |
run: pip install pyinstaller | |
- name: Install Dependencies | |
run: pip install -r requirements.txt | |
- name: Build executable for macOS | |
run: | | |
pyinstaller --onefile commitify.py | |
- name: Move macOS executable | |
run: | | |
mv dist/commitify ./commitify-darwin | |
- name: Upload macOS artifact | |
uses: actions/upload-artifact@v4 # Use v4 | |
with: | |
name: macos-executable | |
path: commitify-darwin # Ensure this matches the moved file's name | |
release: | |
needs: [build-linux, build-windows, build-macos] | |
runs-on: ubuntu-latest # This can be any OS since we are just uploading artifacts. | |
steps: | |
- name: Checkout code for release job | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # Fetch all history to access tags | |
- name: Get Latest Tag | |
id: get_latest_tag | |
run: | | |
echo "LATEST_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV | |
- name: Build Changelog | |
id: build_changelog | |
uses: mikepenz/release-changelog-builder-action@v5 | |
with: | |
mode: "COMMIT" # Use commit-based mode | |
fromTag: ${{ env.LATEST_TAG }} # Use the latest tag found in the previous step | |
toTag: main # Compare to the main branch | |
configurationJson: | | |
{ | |
"categories": [ | |
{ | |
"title": "## Features", | |
"labels": [ | |
"feat", | |
"✨ feat:", | |
"📈 feat:", | |
"🚀 deploy:", | |
"👽️ feat:", | |
"🚸 feat:", | |
"🏗️ refactor:", | |
"♿️ feat:", | |
"🌱 feat:", | |
"➕ feat:", | |
"➖ fix:", | |
"💫 feat:", | |
"💸 chore:", | |
"👔 feat:", | |
"🩺 feat:", | |
"🥚 feat:" | |
] | |
}, | |
{ | |
"title": "## Fixes", | |
"labels": [ | |
"fix", | |
"🐛 fix:", | |
"🩹 fix:", | |
"🚨 fix:", | |
"⚰️ fix:", | |
"💚 ci:" | |
] | |
}, | |
{ "title": "## Performance Improvements", "labels": ["⚡️ perf:" ] }, | |
{ "title": "## Documentation", "labels": ["docs", "📝 docs:" ] }, | |
{ "title": "## Style Changes", "labels": ["style", "🎨 style:" ] }, | |
{ "title": "## Critical Fixes", "labels": ["🚑️ fix:", "🔥 fix:" ] }, | |
{ "title": "## Breaking Changes", "labels": ["BREAKING CHANGE", "💥 BREAKING CHANGE:" ] }, | |
{ "title": "## Other Changes", "labels": [] } | |
], | |
"ignore_labels": [], | |
"empty_template": "- No changes", | |
"commit_template": "- `{{SHA}}`: {{message}} ({{author}})" | |
} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
# Download artifacts from previous jobs. | |
- name: Download Linux artifact | |
uses: actions/download-artifact@v4 # Use v4 to download artifacts. | |
with: | |
name: linux-executable | |
- name: Download Windows artifact | |
uses: actions/download-artifact@v4 # Use v4 to download artifacts. | |
with: | |
name: windows-executable | |
- name: Download macOS artifact | |
uses: actions/download-artifact@v4 # Use v4 to download artifacts. | |
with: | |
name: macos-executable | |
# List downloaded files for debugging purposes. | |
- name: List downloaded files before release upload | |
run: ls -al | |
- name: Create Pre-Release Assets using softprops/action-gh-release | |
uses: softprops/action-gh-release@v1 | |
with: | |
tag_name: "${{ github.event.inputs.release_version }}" # Use input for tag_name. | |
name: "${{ github.event.inputs.release_version }}" | |
body: ${{ steps.build_changelog.outputs.changelog }} # Use the generated changelog as release notes | |
files: commitify-linux, commitify.exe, commitify-darwin, commitify.py | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Use the GitHub token for authentication |