Skip to content

Build Windows Exe

Build Windows Exe #2

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:
runs-on: windows-latest
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 }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
import json, base64, os
# SSH key is base64-encoded in the secret to avoid multiline issues
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",
},
"anthropic": {
"api_key": os.environ['ANTHROPIC_API_KEY'],
"model": "claude-sonnet-4-6",
},
}
with open('config.json', 'w') as f:
json.dump(config, f, indent=2)
print('config.json assembled successfully')
- name: Build exe with PyInstaller
run: |
pyinstaller `
--onefile `
--noconsole `
--name "CS2AdminTool" `
--add-data "config.json;." `
--paths src `
src\main.py
- name: Upload exe as artifact
uses: actions/upload-artifact@v4
with:
name: CS2AdminTool-Windows
path: dist\CS2AdminTool.exe
retention-days: 90