Skip to content

Commit 06b644b

Browse files
authored
Docker build and official image (#1)
- Added Github CI jobs for automatically build and publish the `wolf-den` image - Added README with instructions on how to plug it with Wolf - Added a wait on container startup for the Wolf socket - Changed DB path from `WolfLeash` to `wolf-den`
1 parent 624e4cc commit 06b644b

File tree

10 files changed

+167
-113
lines changed

10 files changed

+167
-113
lines changed

.github/workflows/docker-build.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: Docker build
2+
3+
on:
4+
push:
5+
6+
jobs:
7+
buildx:
8+
runs-on: ubuntu-latest
9+
steps:
10+
- name: Checkout
11+
uses: actions/checkout@v5
12+
13+
- name: Docker meta
14+
id: meta
15+
uses: docker/metadata-action@v5
16+
with:
17+
# list of Docker images to use as base name for tags
18+
images: |
19+
ghcr.io/${{ github.repository_owner }}/wolf-den
20+
# generate Docker tags based on the following events/attributes
21+
tags: |
22+
type=semver,pattern={{version}}
23+
type=semver,pattern={{major}}
24+
type=ref,event=branch
25+
type=raw,value=alpha
26+
type=sha
27+
flavor: latest=false # let's not produce a :latest tag
28+
29+
- name: Set up Docker Buildx
30+
uses: docker/setup-buildx-action@v3
31+
32+
- name: Login to GitHub Container Registry
33+
if: github.event_name != 'pull_request'
34+
uses: docker/login-action@v3
35+
with:
36+
registry: ghcr.io
37+
username: ${{ github.repository_owner }}
38+
password: ${{ secrets.GHCR_TOKEN }}
39+
40+
- name: Build Wolf Den
41+
uses: docker/build-push-action@v6
42+
with:
43+
builder: ${{ steps.buildx.outputs.name }}
44+
context: .
45+
file: Dockerfile
46+
push: ${{ github.event_name != 'pull_request' }}
47+
tags: ${{ steps.meta.outputs.tags }}
48+
labels: ${{ steps.meta.outputs.labels }}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ FROM base AS final
2323

2424
USER root
2525

26-
ARG TARGETARCH TARGETVARIANT
2726
ARG GOSU_VERSION=1.14
2827

2928
RUN <<_INSTALL_PACKAGES
@@ -48,7 +47,7 @@ apt-get install -y --no-install-recommends \
4847
echo "**** Install gosu ****"
4948
wget --progress=dot:giga \
5049
-O /usr/bin/gosu \
51-
"https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${TARGETARCH}${TARGETVARIANT}"
50+
"https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64"
5251
chmod +x /usr/bin/gosu
5352

5453
echo "**** Verify gosu works ****"

README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Wolf Den
2+
3+
A web UI for managing Wolf
4+
5+
## Quickstart
6+
7+
> [!IMPORTANT]
8+
>
9+
> Wolf Den requires access to the Wolf UNIX socket to function correctly.
10+
>
11+
> To enable the Wolf socket:
12+
>
13+
> 1. Set the `WOLF_SOCKET_PATH` environment variable in your Wolf container:
14+
> ```bash
15+
> -e WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock
16+
> ```
17+
> 2. Mount the socket location to the host machine:
18+
> ```bash
19+
> -v /var/run/wolf:/var/run/wolf
20+
> ```
21+
> 3. Ensure the `wolf.sock` file is created inside the container at `/var/run/wolf/wolf.sock`.
22+
23+
```bash
24+
docker run --name wolf-den \
25+
-p 8080:8080 \
26+
-e WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock
27+
-v /var/run/wolf:/var/run/wolf \
28+
-v /etc/wolf/wolf-den:/app/wolf-den/ \
29+
ghcr.io/games-on-whales/wolf-den:stable
30+
```
31+
32+
### Example compose
33+
34+
Follow the [Wolf quickstart guide](https://games-on-whales.github.io/wolf/stable/user/quickstart.html) for your
35+
platform; here's an example using the Intel/AMD platform
36+
37+
```yaml
38+
version: "3"
39+
services:
40+
wolf:
41+
image: ghcr.io/games-on-whales/wolf:stable
42+
environment:
43+
# Add this line
44+
- WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock
45+
volumes:
46+
- /etc/wolf/:/etc/wolf
47+
- /var/run/docker.sock:/var/run/docker.sock:rw
48+
- /dev/:/dev/:rw
49+
- /run/udev:/run/udev:rw
50+
# Mount the Wolf socket in our custom volume
51+
- wolf-socket:/var/run/wolf
52+
device_cgroup_rules:
53+
- 'c 13:* rmw'
54+
devices:
55+
- /dev/dri
56+
- /dev/uinput
57+
- /dev/uhid
58+
network_mode: host
59+
restart: unless-stopped
60+
61+
wolf-den:
62+
image: ghcr.io/games-on-whales/wolf-den:stable
63+
ports:
64+
- 8080:8080
65+
environment:
66+
- WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock
67+
volumes:
68+
- /etc/wolf/wolf-den:/app/wolf-den/
69+
# Mount the Wolf socket from our custom volume
70+
- wolf-socket:/var/run/wolf
71+
72+
volumes:
73+
wolf-socket:
74+
```

WolfLeash.sln

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WolfApi", "WolfApi\WolfApi.
88
EndProject
99
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A8A0A546-CFEE-4B32-97BE-0C4C8B5A9703}"
1010
ProjectSection(SolutionItems) = preProject
11-
compose.yaml = compose.yaml
11+
Dockerfile = Dockerfile
12+
README.md = README.md
13+
.github\workflows\docker-build.yml = .github\workflows\docker-build.yml
1214
EndProjectSection
1315
EndProject
1416
Global

WolfLeash.sln.DotSettings.user

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,21 @@
1111
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADebugger_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Ff45331ad5dc3d61092b03114fefc63b69ad6f9cecb66664e4ecbc33bb2630_003FDebugger_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1212
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADelegatingHandler_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fa5e9d19f51b45463fc3d8b9b285d91a345f32c9211bf80d746413269aae9_003FDelegatingHandler_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1313
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADeniedValuesAttribute_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fb7cc63ea97dd7b5fc3d267e017725eac6a665fe64ed84eed9b84078e687_003FDeniedValuesAttribute_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
14+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADirectoryInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb9c62e8e682440cd84e6081f7672fcd3d1a000_003Fd9_003F36520a4d_003FDirectoryInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1415
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADistinct_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbdb2fa64a65c97eadf5ef039ab91ac3699779b32dbdaf8f723e7ac238db251_003FDistinct_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1516
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADistinct_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fbdb2fa64a65c97eadf5ef039ab91ac3699779b32dbdaf8f723e7ac238db251_003FDistinct_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
17+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFileNotFoundException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb9c62e8e682440cd84e6081f7672fcd3d1a000_003F34_003F5087f03e_003FFileNotFoundException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
18+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFileSystemEnumerator_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb9c62e8e682440cd84e6081f7672fcd3d1a000_003Fbc_003Fb965d215_003FFileSystemEnumerator_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1619
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AHttpClient_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003F60038225224a9318597b3232280390933d3c3fe85d9ed859a7e4825915eb1c_003FHttpClient_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1720
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIHostedService_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F62f7e27e0f874648981d4543694436cce400_003F6a_003Faec5c3c9_003FIHostedService_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
21+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIOException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb9c62e8e682440cd84e6081f7672fcd3d1a000_003Fec_003Ff7027195_003FIOException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1822
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMethodBaseInvoker_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fd6b757e154dd7f8c23e0e785431c97a76e4b9c6bdae38b978238421dbab55d_003FMethodBaseInvoker_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
23+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMonitor_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb9c62e8e682440cd84e6081f7672fcd3d1a000_003Fcc_003F4e89f31e_003FMonitor_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
1924
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANavItem_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F07d247b3da4c414580943759555dde88e3200_003F2e_003F5bd4224b_003FNavItem_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
2025
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANSwagDocker_002Eg_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe1ced10a265342fec433a8459fa104e6ec26489_003FNSwagDocker_002Eg_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
2126
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANSwagWolfApi_002Eg_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Ftmp_003FJetBrainsPerUserTemp_002D1000_002D1_003FSourceGeneratedDocuments_003F07E555D47EB65D9D215177D6_003FOpenApiGenerator_003FOpenApiGenerator_002ESourceGeneratorWithAdditionalFiles_003FNSwagWolfApi_002Eg_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
2227
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APieChartDataset_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F07d247b3da4c414580943759555dde88e3200_003F7a_003F9c5a36de_003FPieChartDataset_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
28+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APieChartDataset_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F07d247b3da4c414580943759555dde88e3200_003F7a_003F9c5a36de_003FPieChartDataset_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
2329
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARequiredAttribute_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F1b4c2e87d7878eb25e1dcae2d94dd7826e7d5cbf6c7e43e736b7a453368ce_003FRequiredAttribute_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
2430
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASidebar2Item_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F07d247b3da4c414580943759555dde88e3200_003F49_003F2b7d7087_003FSidebar2Item_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
2531
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASocketsHttpHandler_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fdf5afcd475697c11dccf9ef2cd7374f86619fc49c54aec59ae8ee24141976181_003FSocketsHttpHandler_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@@ -34,6 +40,7 @@
3440
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F4743f513c7ddc8411223a46f0ca426ed929391acebcff993721dff2f0c6b34_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3541
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F8874fa6fbc50b05ba8332188d36141eb4bba81fb1f92189ba9d7a25f545_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3642
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AToastMessage_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F07d247b3da4c414580943759555dde88e3200_003Fa2_003F7e2a5c1a_003FToastMessage_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
43+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUnauthorizedAccessException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb9c62e8e682440cd84e6081f7672fcd3d1a000_003Fbf_003F86e58c84_003FUnauthorizedAccessException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3744
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AValidationAttribute_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Ff5379071e4f83fd6ca437fdb7b21f5d70eef8a11e147f8c0ca75523d742dd0_003FValidationAttribute_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3845
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AValidationMessage_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fac3bd96e7bc584b5bed1f3fd84642ddcbc2756291a45fc2079313a609c56b6cc_003FValidationMessage_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3946
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AValidator_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F56de12c561b3b4753be71e8c3af9866138e02180939a69a4e1b5cbb858251_003FValidator_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

WolfLeash/Database/WolfLeashDbContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ private static DbContextOptions<WolfLeashDbContext> CreateOptions(DbContextOptio
2323

2424
var folder = Environment.SpecialFolder.LocalApplicationData;
2525
var path = Environment.GetFolderPath(folder);
26-
var dbPath = Path.Join(path, "WolfLeash");
26+
var dbPath = Path.Join(path, "wolf-den");
2727

2828
if(!Directory.Exists(dbPath))
2929
Directory.CreateDirectory(dbPath);

WolfLeash/DockerOverlay/entrypoint.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ if [ "$(id -u)" = "0" ]; then
2222
done
2323
fi
2424

25-
socat UNIX-LISTEN:/app/wolf.sock,mode=600,user=${APP_UID},group=${APP_UID},reuseaddr,fork UNIX-CONNECT:/etc/wolf/cfg/wolf.sock 2> /dev/null &
25+
WOLF_SOCKET_PATH=${WOLF_SOCKET_PATH:-/var/run/wolf/wolf.sock}
26+
socat UNIX-LISTEN:/app/wolf.sock,mode=600,user=${APP_UID},group=${APP_UID},reuseaddr,fork UNIX-CONNECT:${WOLF_SOCKET_PATH} 2> /dev/null &
2627
export "WOLF_SOCKET_PATH=unix:///app/wolf.sock"
2728

2829
echo "Starting Server"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
SOCKET=${WOLF_SOCKET_PATH:-/var/run/wolf/wolf.sock}
6+
TIMEOUT=${WOLF_SOCKET_TIMEOUT:-30}
7+
INTERVAL=1
8+
9+
echo -n "Waiting for Wolf socket: $SOCKET "
10+
11+
elapsed=0
12+
while [ ! -S "$SOCKET" ]; do
13+
if [ $elapsed -ge $TIMEOUT ]; then
14+
echo ""
15+
echo "Timeout: Socket did not appear within ${TIMEOUT}s"
16+
exit 1
17+
fi
18+
echo -n "."
19+
sleep $INTERVAL
20+
elapsed=$((elapsed + INTERVAL))
21+
done
22+
23+
echo "Socket file exists, testing connectivity..."
24+
25+
# Test if socket is actually working with netcat
26+
if timeout 2 nc -U "$SOCKET" -z 2>/dev/null; then
27+
echo "Socket is available and responsive"
28+
else
29+
echo "Socket exists but may not be ready, is Wolf up and running?"
30+
fi

WolfLeash/WolfLeash.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
</ItemGroup>
2424

2525
<ItemGroup>
26+
<Folder Include="DockerOverlay\etc\cont-shutdown.d\" />
2627
<Folder Include="wwwroot\lib\" />
2728
</ItemGroup>
2829

0 commit comments

Comments
 (0)