From 7d6a3832313a63c7f4bf2ff8205097278ced5228 Mon Sep 17 00:00:00 2001 From: Fewiel Date: Fri, 13 Mar 2026 20:51:47 +0100 Subject: [PATCH 1/9] feat: Spoolman-compatible API and Klipper integration --- .github/workflows/staging.yml | 100 ++++++++++++ .../Layout/MainLayout.razor | 6 + .../Pages/Settings/SpoolmanSettings.razor | 132 ++++++++++++++++ .../Pages/Spools/SpoolDetail.razor | 7 + src/SpoolManager.Client/Program.cs | 1 + .../Services/SpoolmanApiKeyService.cs | 23 +++ src/SpoolManager.Client/_Imports.razor | 1 + src/SpoolManager.Client/wwwroot/i18n/de.json | 12 +- src/SpoolManager.Client/wwwroot/i18n/en.json | 12 +- .../Data/Mappings/SpoolManagerMappings.cs | 11 ++ .../Data/SpoolManagerDb.cs | 1 + .../Migrations/M011_SpoolmanCompat.cs | 26 ++++ .../Repositories/SpoolRepository.cs | 34 ++++ .../Repositories/SpoolmanApiKeyRepository.cs | 47 ++++++ .../Services/OpenSpoolService.cs | 43 +++++- .../Controllers/SpoolmanController.cs | 146 ++++++++++++++++++ .../Controllers/SpoolmanSettingsController.cs | 78 ++++++++++ .../Controllers/SpoolsController.cs | 1 + .../Controllers/TagsController.cs | 4 +- .../Filters/SpoolmanAuthFilter.cs | 45 ++++++ src/SpoolManager.Server/Program.cs | 2 + .../DTOs/Spoolman/SpoolmanDtos.cs | 128 +++++++++++++++ .../DTOs/Spools/SpoolDtos.cs | 1 + src/SpoolManager.Shared/Models/Spool.cs | 1 + .../Models/SpoolmanApiKey.cs | 11 ++ 25 files changed, 865 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/staging.yml create mode 100644 src/SpoolManager.Client/Pages/Settings/SpoolmanSettings.razor create mode 100644 src/SpoolManager.Client/Services/SpoolmanApiKeyService.cs create mode 100644 src/SpoolManager.Infrastructure/Migrations/M011_SpoolmanCompat.cs create mode 100644 src/SpoolManager.Infrastructure/Repositories/SpoolmanApiKeyRepository.cs create mode 100644 src/SpoolManager.Server/Controllers/SpoolmanController.cs create mode 100644 src/SpoolManager.Server/Controllers/SpoolmanSettingsController.cs create mode 100644 src/SpoolManager.Server/Filters/SpoolmanAuthFilter.cs create mode 100644 src/SpoolManager.Shared/DTOs/Spoolman/SpoolmanDtos.cs create mode 100644 src/SpoolManager.Shared/Models/SpoolmanApiKey.cs diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml new file mode 100644 index 0000000..4859233 --- /dev/null +++ b/.github/workflows/staging.yml @@ -0,0 +1,100 @@ +name: Staging Deploy (Beta) + +on: + push: + branches: [beta] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + ref: beta + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: '10.0.x' + + - name: Publish + run: | + dotnet publish src/SpoolManager.Server/SpoolManager.Server.csproj \ + -c Release \ + -o ./publish \ + --no-self-contained + + - name: Create archive + run: cd publish && zip -r ../spoolhero-beta.zip . + + - uses: actions/upload-artifact@v4 + with: + name: spoolhero-beta + path: spoolhero-beta.zip + retention-days: 3 + + deploy: + runs-on: ubuntu-latest + needs: build + + steps: + - uses: actions/download-artifact@v4 + with: + name: spoolhero-beta + + - name: Stop service + uses: appleboy/ssh-action@v1 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: systemctl stop spoolhero-beta || true + + - name: Upload archive + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "spoolhero-beta.zip" + target: "/tmp/" + + - name: Deploy and start + uses: appleboy/ssh-action@v1 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + rm -rf /opt/spoolhero-beta + mkdir -p /opt/spoolhero-beta + unzip /tmp/spoolhero-beta.zip -d /opt/spoolhero-beta + rm /tmp/spoolhero-beta.zip + cp /opt/appsettings-beta.json /opt/spoolhero-beta/appsettings.json + chown -R www-data:www-data /opt/spoolhero-beta + + # Create systemd service if it doesn't exist yet + if [ ! -f /etc/systemd/system/spoolhero-beta.service ]; then + cat > /etc/systemd/system/spoolhero-beta.service << 'EOF' + [Unit] + Description=SpoolHero Beta Staging + After=network.target + + [Service] + WorkingDirectory=/opt/spoolhero-beta + ExecStart=/usr/bin/dotnet /opt/spoolhero-beta/SpoolManager.Server.dll + Restart=always + RestartSec=5 + User=www-data + Environment=ASPNETCORE_ENVIRONMENT=Staging + Environment=ASPNETCORE_URLS=http://localhost:5100 + + [Install] + WantedBy=multi-user.target + EOF + systemctl daemon-reload + systemctl enable spoolhero-beta + fi + + systemctl start spoolhero-beta diff --git a/src/SpoolManager.Client/Layout/MainLayout.razor b/src/SpoolManager.Client/Layout/MainLayout.razor index 9b79d2c..9891409 100644 --- a/src/SpoolManager.Client/Layout/MainLayout.razor +++ b/src/SpoolManager.Client/Layout/MainLayout.razor @@ -135,6 +135,7 @@ else
  • @L["nav.settings.account"]
  • @L["auth.change.password"]
  • @L["settings.notifications.title"]
  • +
  • @L["nav.settings.spoolman"]
  • +