Build Windows Exe #4
This file contains hidden or 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 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 |