Builder #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 release | |
on: | |
workflow_dispatch: | |
inputs: | |
NO_WINDOWS: | |
description: "No Windows" | |
type: boolean | |
required: true | |
default: false | |
TEST_ONLY: | |
description: "Test only" | |
type: boolean | |
required: true | |
default: false | |
env: | |
MAIN_PY: "main.py" | |
REQFILE: "requirements.txt" | |
THE_NAME: "shled" | |
jobs: | |
job-build: | |
name: Build and upload executable binary | |
strategy: | |
matrix: | |
os: [ubuntu-20.04,windows-2019 ] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Check if on Windows | |
if: ${{ contains(matrix.os,'windows') == true && inputs.NO_WINDOWS == true }} | |
run: exit 1 | |
- name: Download repo | |
uses: actions/checkout@v4 | |
with: | |
path: repo | |
- name: Setup Python | |
uses: actions/setup-python@v3 | |
with: | |
python-version: "3.9.6" | |
- name: Setup Python (project dependencies) | |
working-directory: repo | |
run: | | |
pip install -r "${{ env.REQFILE }}" | |
- name: Setup Python (install Nuitka) | |
run: | | |
pip install nuitka | |
- name: Build for Linux | |
if: ${{ contains(matrix.os,'windows') == false }} | |
working-directory: repo | |
run: | | |
# python -m nuitka --onefile --onefile-no-compression --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.bin" | |
python -m nuitka --standalone --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.bin" | |
- name: Build for Linux (after) | |
if: ${{ contains(matrix.os,'windows') == false && inputs.TEST_ONLY == false }} | |
working-directory: repo | |
run: | | |
echo "[ LINKING ]" | |
ldd "the-output/main.dist/${{ env.THE_NAME }}.bin" | |
echo "[ CONTENTS ]" | |
find the-output | |
- name: Build for Windows | |
if: ${{ contains(matrix.os,'windows') == true }} | |
working-directory: repo | |
run: | | |
# python -m nuitka --onefile --onefile-no-compression --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.exe" | |
python -m nuitka --standalone --assume-yes-for-downloads "main.py" --output-dir="the-output" --output-filename="${{ env.THE_NAME }}.exe" | |
- name: Build for Windows (after) | |
if: ${{ contains(matrix.os,'windows') == true && inputs.TEST_ONLY == false }} | |
working-directory: repo | |
run: | | |
dir /s /b the-output | |
- uses: actions/upload-artifact@v3 | |
if: ${{ inputs.TEST_ONLY == false }} | |
with: | |
if-no-files-found: error | |
name: "${{ matrix.os }}" | |
path: | | |
./repo/the-output/${{ env.THE_NAME }}.bin | |
./repo/the-output/${{ env.THE_NAME }}.exe | |
job-release: | |
name: Create release | |
needs: [job-build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get exact date | |
id: step_date | |
run: | | |
echo "VAR_DATE=$(date +%Y-%m-%d-%H-%M-%S)" >> $GITHUB_OUTPUT | |
- name: (dbg) Printing date | |
run: echo "${{ steps.step_date.outputs.VAR_DATE }}" | |
- name: Create release | |
if: ${{ inputs.TEST_ONLY == false }} | |
id: step_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} | |
with: | |
tag_name: "${{ steps.step_date.outputs.VAR_DATE }}" | |
release_name: "${{ steps.step_date.outputs.VAR_DATE }}" | |
draft: false | |
prerelease: false | |
- name: Write data to NOTES | |
run: | | |
echo "" > NOTES.txt | |
echo "THE_URL=${{ steps.step_release.outputs.upload_url }}" >> NOTES.txt | |
echo "THE_DATE=${{ steps.step_date.outputs.VAR_DATE }}" >> NOTES.txt | |
echo "{" | |
cat NOTES.txt | |
echo "}" | |
- name: Upload NOTES | |
uses: actions/upload-artifact@v3 | |
with: | |
name: "NOTES" | |
path: "NOTES.txt" | |
if-no-files-found: error | |
job-attach: | |
name: Attach artifact as an asset | |
needs: [job-release] | |
strategy: | |
max-parallel: 2 | |
matrix: | |
binary: [ubuntu-20.04 , windows-2019 ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download repo (again) | |
if: ${{ inputs.TEST_ONLY == false }} | |
uses: actions/checkout@v4 | |
with: | |
path: repo | |
- name: Download Notes | |
uses: actions/download-artifact@v3 | |
with: | |
name: "NOTES" | |
- name: Recover from Notes | |
id: step_notes | |
run: | | |
cat NOTES.txt | |
cat NOTES.txt >> $GITHUB_OUTPUT | |
- name: (dbg) Test Notes | |
run: | | |
echo "CURRENT DATE = ${{ steps.step_notes.outputs.THE_DATE }}" | |
echo "UPLOAD URL = ${{ steps.step_notes.outputs.THE_URL }}" | |
- name: Download artifact | |
if: ${{ inputs.TEST_ONLY == false }} | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ matrix.binary }} | |
path: "${{ env.THE_NAME }}" | |
- name: Create the package | |
if: ${{ inputs.TEST_ONLY == false }} | |
run: | | |
cp -v repo/config.yaml "${{ env.THE_NAME }}/config.yaml" | |
mkdir -v "${{ env.THE_NAME }}/sources" | |
cp -v repo/htmx.min.js "${{ env.THE_NAME }}/sources/htmx.min.js" | |
cp -v repo/custom.css "${{ env.THE_NAME }}/sources/custom.css" | |
echo "${{ steps.step_notes.outputs.THE_DATE }}" > "${{ env.THE_NAME }}/README.md" | |
cat repo/README.md >> "${{ env.THE_NAME }}/README.md" | |
zip -0 -r "${{ env.THE_NAME }}-${{ matrix.binary }}.zip" "${{ env.THE_NAME }}" | |
find . | |
- name: Attach the artifact | |
if: ${{ inputs.TEST_ONLY == false }} | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} | |
with: | |
upload_url: "${{ steps.step_notes.outputs.THE_URL }}" | |
asset_path: "${{ env.THE_NAME }}-${{ matrix.binary }}.zip" | |
asset_name: "${{ env.THE_NAME }}-${{ matrix.binary }}.zip" | |
asset_content_type: application/octet-stream | |