Skip to content

Development

MCmoderSD edited this page Nov 3, 2026 · 3 revisions

Development

Part Address Needs
Backend http://localhost:5000 The .NET 10 SDK and an installed 7-Zip.
Frontend http://localhost:4200 Node 26. Forwards /api and /health to the backend.

Both ports are fixed: the backend gets 5000 from backend/AniLink.Api/Properties/launchSettings.json, the frontend uses 4200, and frontend/proxy.conf.json points at 5000. On macOS, the AirPlay Receiver can occupy port 5000; switch it off in the system settings, or change the port in those two files.

# Backend, on http://localhost:5000
cd backend/AniLink.Api
dotnet run

Put the API key into backend/AniLink.Api/appsettings.Local.json (git-ignored; user secrets and environment variables such as Debrid_ApiKey work too):

{
  "DebridLink": { "ApiKey": "your-api-key" },
  "Archive": { "Passwords": [ "www.example.org" ] }
}

In development, downloads go to downloads/ in the repository, and 7-Zip is expected at C:\Program Files\7-Zip\7z.exe. On Linux and macOS, set Archive:SevenZipPath to 7zz or 7z.

# Frontend, on http://localhost:4200 (forwards /api to the backend)
cd frontend
npm ci
npm start

npm run build is the check that the frontend compiles. It also writes a .br and a .gz file next to every text file of the build (frontend/scripts/precompress.mjs), compressed once at the highest level, and the backend serves them to a browser that accepts them. With ng build alone, the backend sends the plain files and compresses them on the fly at a low level. dotnet build backend/AniLink.slnx is the check for the backend, and docker compose build the one for the image.

What is where

Folder or file Contents
backend/AniLink.Api/ The .NET API: controllers call services, services call repositories.
frontend/ The Angular web page (Angular Material, signals).
frontend/scripts/ Compresses the build once for the server; npm run build runs it.
Dockerfile Builds both and bundles 7-Zip into one image.
docker-compose.yaml How the container is started.
.env.example The template for .env.

Releasing

The version lives in three files that have to agree: <Version> in backend/AniLink.Api/AniLink.Api.csproj, and version in frontend/package.json and frontend/package-lock.json. npm version X.Y.Z --no-git-tag-version in frontend/ sets the last two. The workflow reads all three and stops if they differ.

To release, raise the version in all three and start the title of the commit, or of the pull request, with Release and the version: Release X.Y.Z - what changed. When it reaches master, GitHub Actions publishes X.Y.Z, X.Y, X and latest, and sets the git tag X.Y.Z. The number in the title has to be the version in the files, and a version can be released only once. Every other push to master publishes edge and nothing else. A pre-release such as X.Y.Z-rc.1 gets only its own tag.

Merge the pull request with Create a merge commit or Squash and merge. With Rebase and merge, only the title of the last commit counts.

If the title was forgotten, the release can be started by hand: Actions → Docker Build & Push → Run workflow, on master, with release ticked. It publishes the version in the files as a release, exactly as if the title had said so, as long as that version has not been released before.

Clone this wiki locally