Skip to content

Build Windows Exe

Build Windows Exe #4

Workflow file for this run

name: Build Windows Exe
on:
workflow_dispatch: # Manual trigger from GitHub UI
push:
branches: [main]
paths:
- 'src/**'
- 'requirements.txt'
jobs:
build:
strategy:
matrix:
include:
- os: windows-latest
artifact_name: CS2AdminTool-Windows
pyinstaller_sep: ";"
pyinstaller_extra: "--noconsole"
artifact_path: dist/CS2AdminTool.exe
- os: macos-latest
artifact_name: CS2AdminTool-Mac
pyinstaller_sep: ":"
pyinstaller_extra: "--windowed"
artifact_path: CS2AdminTool-Mac.zip
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pyinstaller
- name: Assemble config.json from secrets
shell: python
env:
CS2BOT_PRIVATE_KEY_B64: ${{ secrets.CS2BOT_PRIVATE_KEY_B64 }}
CS2_SERVER_IP: ${{ secrets.CS2_SERVER_IP }}
CS2_SERVER_PASSWORD: ${{ secrets.CS2_SERVER_PASSWORD }}
CS2_GSLT_TOKEN: ${{ secrets.CS2_GSLT_TOKEN }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
import json, base64, os
private_key = base64.b64decode(os.environ['CS2BOT_PRIVATE_KEY_B64']).decode()
config = {
"server": {
"ip": os.environ['CS2_SERVER_IP'],
"ssh_port": 22,
"ssh_user": "cs2bot",
"ssh_private_key": private_key,
"server_password": os.environ['CS2_SERVER_PASSWORD'],
"gslt_token": os.environ['CS2_GSLT_TOKEN'],
},
"azure": {
"subscription_id": os.environ['AZURE_SUBSCRIPTION_ID'],
"tenant_id": os.environ['AZURE_TENANT_ID'],
"client_id": os.environ['AZURE_CLIENT_ID'],
"client_secret": os.environ['AZURE_CLIENT_SECRET'],
"resource_group": "cs2-server-rg",
"vm_name": "cs2-server-vm",
},
"openai": {
"api_key": os.environ['OPENAI_API_KEY'],
"model": "gpt-4o",
},
}
with open('config.json', 'w') as f:
json.dump(config, f, indent=2)
print('config.json assembled successfully')
- name: Build with PyInstaller (Windows)
if: runner.os == 'Windows'
run: |
pyinstaller `
--onefile `
--noconsole `
--name "CS2AdminTool" `
--add-data "config.json;." `
--paths src `
src\main.py
- name: Build with PyInstaller (Mac)
if: runner.os == 'macOS'
run: |
pyinstaller -y \
--windowed \
--name "CS2AdminTool" \
--add-data "config.json:." \
--paths src \
src/main.py
zip -qr CS2AdminTool-Mac.zip dist/CS2AdminTool.app
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: ${{ matrix.artifact_path }}
retention-days: 90