Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
17432be
WIP: adding discord bot to application model
Cryptoc1 Mar 17, 2026
c551897
WIP: Implementing Discord bot into new apire based platform
Cryptoc1 Mar 26, 2026
1a8e1b2
FIX: typo in workflow
Cryptoc1 Mar 26, 2026
14b5147
[FIX] use `dotnet aspire` tool
Cryptoc1 Mar 26, 2026
b3c8541
Publishing Updates:
Cryptoc1 Mar 26, 2026
6e59076
[FIX] remote image tagging
Cryptoc1 Mar 26, 2026
df3b7cd
[FIX] enable logging for aspire push; use lowercase repo for containe…
Cryptoc1 Mar 26, 2026
17ed180
[FIX] container registry repo url
Cryptoc1 Mar 26, 2026
75a585d
[FIX] don't use buildx
Cryptoc1 Mar 27, 2026
3ad8416
[NEW] generate docker compose artifact during publish stage
Cryptoc1 Mar 27, 2026
4d9d546
[FIX] compose output path?
Cryptoc1 Mar 27, 2026
c5ceb52
[FIX] generate docker compose
Cryptoc1 Mar 27, 2026
e136c20
[FIX] include dot files in compose artifact
Cryptoc1 Mar 27, 2026
52e532e
[NEW] path generated `.env` prior to artifact publishing
Cryptoc1 Mar 27, 2026
7bda2a8
[FIX] generate compose error??
Cryptoc1 Mar 27, 2026
5fd0297
[FIX] generate compose error
Cryptoc1 Mar 27, 2026
76840ce
Deployment Updates:
Cryptoc1 Mar 27, 2026
452ac55
[NEW] added `deploy` stage to default workflow
Cryptoc1 Mar 27, 2026
052a91f
[NEW] update deps
Cryptoc1 Mar 27, 2026
2c30f5c
[TEMP] log deployment files
Cryptoc1 Mar 27, 2026
63c4b74
[FIX] `strip_components` parameters when deploying artifact
Cryptoc1 Mar 27, 2026
c09ce47
[FIX] `parallelism` serialized as a `string` rather than `int`
Cryptoc1 Mar 27, 2026
1041ea6
[FIX] `depends_on` parsing errors
Cryptoc1 Mar 27, 2026
d7949c6
[FIX] python indentation errors
Cryptoc1 Mar 27, 2026
14aebae
[FIX] invalid `docker-compose.yaml` path
Cryptoc1 Mar 27, 2026
5dbf66a
[FIX] compose string interpolation due to unloaded `.env` source
Cryptoc1 Mar 28, 2026
54cf3c0
[FIX] incorrect env variable names
Cryptoc1 Mar 28, 2026
1f77c39
[FIX] use manually generated PAT for `docker stack deploy`
Cryptoc1 Mar 28, 2026
bbdeb90
[FIX] versioning/container build args
Cryptoc1 Mar 28, 2026
005c784
[FIX] adjust container build args
Cryptoc1 Mar 28, 2026
a553449
[FIX] service discovery configuration for `api` resource
Cryptoc1 Mar 28, 2026
b6cc894
[NEW] added/improved logging around `StationPlayer`/`Playback`
Cryptoc1 Mar 28, 2026
74e7331
[NEW] adjust formatting of voice logging adapter
Cryptoc1 Mar 28, 2026
d2ee85d
[NEW] make `wadio` network `attachable`
Cryptoc1 Mar 28, 2026
172baf9
General Updates
Cryptoc1 Mar 28, 2026
ba24bb0
General Updates:
Cryptoc1 Mar 28, 2026
5940bd4
General Updates:
Cryptoc1 Mar 29, 2026
8c55e13
[NEW] periodically update bot presence with player+guild count
Cryptoc1 Mar 29, 2026
1f47b4e
[FIX] discord native lib publishing
Cryptoc1 Mar 29, 2026
7f8f631
[FIX] broken `Dockerfile`s
Cryptoc1 Mar 29, 2026
d52e0c9
General Updates:
Cryptoc1 Mar 29, 2026
b0c2cb4
[NEW] refresh presence more frequently
Cryptoc1 Mar 29, 2026
0cc938f
[FIX] flow exceptions to caller when `GetOrAddPlayer` throws
Cryptoc1 Mar 29, 2026
08df653
[NEW] collect metadata samples from `api`+`discord` usage of `Icecast…
Cryptoc1 Mar 30, 2026
cfe9138
[FIX] set sampler data mount source during deployment
Cryptoc1 Mar 30, 2026
24c06f1
[FIX] set sampler image tag during publish;
Cryptoc1 Mar 30, 2026
5c24bd8
[NEW] update deps
Cryptoc1 Mar 30, 2026
4b80bdc
[NEW] adjust resource reservations for `sampler`
Cryptoc1 Mar 30, 2026
7df1223
[NEW] support inviting user's to join a listening session on discord
Cryptoc1 Mar 31, 2026
848d429
[NEW] use docker buildx [caching] in CI
Cryptoc1 Mar 31, 2026
3231ded
[NEW] use `--log-level debug` in CI
Cryptoc1 Mar 31, 2026
0577550
[FIX] do not use docker buildx in CI
Cryptoc1 Mar 31, 2026
b9b21bb
[NEW] added `/wadio donate` command to discord bot
Cryptoc1 Mar 31, 2026
6f33320
[NEW] minor formatting improvements
Cryptoc1 Mar 31, 2026
2333c7b
[NEW] update deps
Cryptoc1 Apr 3, 2026
799b182
[NEW] update deps
Cryptoc1 Apr 3, 2026
5716d52
[NEW] update deps
Cryptoc1 Apr 4, 2026
5f160f2
General Updates:
Cryptoc1 Apr 5, 2026
be28d68
[NEW] update deps
Cryptoc1 Apr 8, 2026
2648faa
[NEW] update deps
Cryptoc1 Apr 9, 2026
2a579e4
[NEW] update deps
Cryptoc1 Apr 9, 2026
5d7da6f
- [NEW] update deps
Cryptoc1 Apr 10, 2026
f202480
[NEW] update deps
Cryptoc1 Apr 10, 2026
4bd3591
[NEW] update deps
Cryptoc1 Apr 16, 2026
65c566d
- [NEW] update deps
Cryptoc1 Apr 16, 2026
03e0842
[NEW] update deps
Cryptoc1 Apr 18, 2026
16fe676
[NEW] update deps
Cryptoc1 Apr 23, 2026
c668f81
[NEW] force `http2` for cloudflare tunnel
Cryptoc1 Apr 23, 2026
4805d34
Revert "[NEW] force `http2` for cloudflare tunnel"
Cryptoc1 Apr 23, 2026
20e728f
[NEW] update deps
Cryptoc1 Apr 23, 2026
2a478db
[FIX] remove svg icon links, as they are not rendered properly (e.g. …
Cryptoc1 Apr 23, 2026
10da66b
[NEW] update deps
Cryptoc1 May 1, 2026
47f129a
[NEW] added invite page for discord bot
Cryptoc1 May 1, 2026
06247ab
[NEW] add privacy policy+TOS
Cryptoc1 May 1, 2026
0d7fd6e
[NEW] use http2 bc cloudflare are cunts
Cryptoc1 May 1, 2026
e5e06bb
[NEW] replicate `cloudflared` to support `http2`+`quic`
Cryptoc1 May 1, 2026
af5d88a
[FIX] resource naming conflict
Cryptoc1 May 1, 2026
23cff7a
[NEW] update deps
Cryptoc1 Jun 28, 2026
d93e7fe
Prep for `v1.9.0`
Cryptoc1 Jul 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .aspire/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"appHostPath": "../src/Platform/src/Wadio.Platform.csproj"
}
28 changes: 28 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
**/.classpath
**/.dockerignore
**/.env
**/*.filenesting.json
**/.git
**/.github
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/bin
**/charts
**/docker-compose*
**/compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
content/
LICENSE
README.md
175 changes: 135 additions & 40 deletions .github/workflows/default.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,24 @@ on:
workflow_dispatch:

env:
ASPIRE_NOLOGO: true
ASPIRE_CLI_TELEMETRY_OPTOUT: true
ASPIRE_NON_INTERACTIVE: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
DOTNET_NOLOGO: true
DOTNET_NON_INTERACTIVE: true
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages

jobs:
build:
permissions:
checks: write
contents: read

runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 1

Expand All @@ -32,36 +38,53 @@ jobs:
node-version: 24.x

- name: setup dotnet
uses: actions/setup-dotnet@v5
uses: actions/setup-dotnet@v6
with:
cache: true
cache-dependency-path: src/**/packages.lock.json
global-json-file: global.json

- name: install workloads
run: dotnet workload restore && dotnet workload install wasm-tools

- name: restore
run: dotnet restore --locked-mode
run: dotnet tool restore && dotnet workload restore && dotnet restore --locked-mode

- name: build
run: dotnet build src/App/Web/Wadio.App.Web.csproj --no-restore
run: dotnet build --no-restore

publish:
if: github.event_name == 'release' && github.event.action == 'published'
needs: [build]

permissions:
attestations: write
checks: write
contents: write
id-token: write
packages: write

runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
fetch-tags: true

- name: setup aspire cache
uses: actions/cache@v4
with:
path: ~/.aspire/deployments
key: aspire-deploy-${{ hashFiles('**/AppHost.csproj') }}-${{ github.ref }}
restore-keys: |
aspire-deploy-${{ hashFiles('**/AppHost.csproj') }}-
aspire-deploy-

- name: setup docker
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: setup node
uses: actions/setup-node@v6
with:
Expand All @@ -70,31 +93,52 @@ jobs:
node-version: 24.x

- name: setup dotnet
uses: actions/setup-dotnet@v5
uses: actions/setup-dotnet@v6
with:
cache: true
cache-dependency-path: src/**/packages.lock.json
global-json-file: global.json

- name: install workloads
run: dotnet workload restore && dotnet workload install wasm-tools

- name: restore
run: dotnet restore --locked-mode

- name: publish
run: dotnet publish src/App/Web/Wadio.App.Web.csproj -o wadio -c Release -r linux-x64 --self-contained --no-restore && zip -r wadio-${{ github.event.release.tag_name }}.zip wadio
run: |
dotnet tool restore && dotnet workload restore
dotnet restore --locked-mode && dotnet aspire restore --apphost src/Platform/src/Wadio.Platform.csproj

- name: upload artifact
uses: actions/upload-artifact@v7
with:
name: wadio
path: wadio

- name: update release
uses: softprops/action-gh-release@v2
- name: build
run: dotnet build src/Platform/src/Wadio.Platform.csproj --no-restore

- name: publish images
run: |
dotnet aspire do push --apphost src/Platform/src/Wadio.Platform.csproj -e Staging --no-build --non-interactive --log-level debug
dotnet aspire publish --apphost src/Platform/src/Wadio.Platform.csproj -o ./dist -e Staging --no-build --non-interactive --log-level debug
sed -i 's/parallelism: "\([0-9]*\)"/parallelism: \1/g' ./dist/docker-compose.yaml

IMAGE_PREFIX="ghcr.io/escd/wadio/wadio"
IMAGE_TAG="$(dotnet msbuild src/Platform/src/Wadio.Platform.csproj -target:"MinVer;SetVersion" -getProperty:ContainerImageTag)"
ENV_FILE="./dist/.env"

upsert() {
local key="$1" val="$2"
if grep -q "^${key}=" "$ENV_FILE" 2>/dev/null; then
sed -i "s|^${key}=.*|${key}=${val}|" "$ENV_FILE"
else
echo "${key}=${val}" >> "$ENV_FILE"
fi
}

upsert "API_IMAGE" "$IMAGE_PREFIX-api:$IMAGE_TAG"
upsert "DISCORD_IMAGE" "$IMAGE_PREFIX-discord:$IMAGE_TAG"
upsert "ROUTER_IMAGE" "$IMAGE_PREFIX-router:$IMAGE_TAG"
upsert "SAMPLER_IMAGE" "$IMAGE_PREFIX-sampler:$IMAGE_TAG"
upsert "WEB_IMAGE" "$IMAGE_PREFIX-web:$IMAGE_TAG"

- name: publish artifact
uses: actions/upload-artifact@v4
with:
files: wadio-${{ github.event.release.tag_name }}.zip
include-hidden-files: true
name: wadio-docker-compose
path: ./dist
retention-days: 14

deploy:
concurrency: live
Expand All @@ -109,21 +153,72 @@ jobs:
- name: download artifact
uses: actions/download-artifact@v8
with:
name: wadio
path: wadio

- name: az login
uses: azure/login@v2
name: wadio-docker-compose
path: src

- name: patch environment secrets
run: |
ENV_FILE="./src/.env"

upsert() {
local key="$1" val="$2"
if grep -q "^${key}=" "$ENV_FILE" 2>/dev/null; then
sed -i "s|^${key}=.*|${key}=${val}|" "$ENV_FILE"
else
echo "${key}=${val}" >> "$ENV_FILE"
fi
}

upsert "BACKPLANE_PASSWORD" "${{ secrets.BACKPLANE_PASSWORD }}"
upsert "CF_TUNNEL_TOKEN" "${{ secrets.CF_TUNNEL_TOKEN }}"
upsert "DISCORD_TOKEN" "${{ secrets.DISCORD_TOKEN }}"
upsert "PUBLIC_URL" "${{ secrets.PUBLIC_URL }}"
upsert "SAMPLER_BINDMOUNT_0" "${{ vars.SAMPLER_BINDMOUNT_DATA }}"

- name: patch docker-compose
run: |
python3 - <<'EOF'
import yaml, sys

path = "./src/docker-compose.yaml"
with open(path) as f:
doc = yaml.safe_load(f)

for svc in doc.get("services", {}).values():
if isinstance(svc.get("depends_on"), dict):
svc["depends_on"] = list(svc["depends_on"].keys())

with open(path, "w") as f:
yaml.dump(doc, f, default_flow_style=False, sort_keys=False)
EOF

- name: deploy artifact
uses: appleboy/scp-action@v1
with:
creds: ${{ secrets.WADIO_DEPLOY_RBAC }}

- name: deploy app service
uses: azure/webapps-deploy@v3
host: ${{ secrets.MANAGER_SSH_HOST }}
username: ${{ secrets.MANAGER_SSH_USER }}
key: ${{ secrets.MANAGER_SSH_KEY }}
rm: true
source: "./src/"
target: "/opt/wadio/"
strip_components: 2

- name: deploy stack
uses: appleboy/ssh-action@v1
with:
app-name: wadio
clean: true
package: wadio
restart: true
host: ${{ secrets.MANAGER_SSH_HOST }}
username: ${{ secrets.MANAGER_SSH_USER }}
key: ${{ secrets.MANAGER_SSH_KEY }}
script: |
set -euo pipefail

echo "${{ secrets.GH_PULL_TOKEN }}" | docker login ghcr.io -u "${{ secrets.GH_PULL_USER }}" --password-stdin
cd /opt/wadio

set -a && source .env && set +a

docker stack deploy --compose-file docker-compose.yaml --detach=true --prune --with-registry-auth wadio
docker stack services wadio

- name: az logout
run: az logout
- name: Post patch environment secrets
run: rm -f ./src/.env
4 changes: 2 additions & 2 deletions .github/workflows/screens.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
fetch-tags: true
Expand All @@ -31,7 +31,7 @@ jobs:
node-version: 24.x

- name: setup dotnet
uses: actions/setup-dotnet@v5
uses: actions/setup-dotnet@v7
with:
cache: true
cache-dependency-path: src/**/packages.lock.json
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,9 @@ $RECYCLE.BIN/
# Vim temporary swap files
*.swp

src/**/aspire-output
src/**/wwwroot/Interop/
tool/MetadataScraper/results/
tool/ScreenCap/data/
tool/ScreenCap/data/
data
dist
Loading
Loading