Repository navigation
Conversation
Upgrades the target framework to .NET 10. Updates several package versions to align with the new framework. Removes obsolete Razor runtime compilation configuration. Enforces authentication for Razor Pages.
Implements paged NuGet registration metadata responses to improve performance for packages with large version histories. This change introduces a configuration option "RegistrationPageSize" to control the number of package versions included in a single registration page. When a package has more versions than this value, the registration index will return paged entries. Also updates service index to include versions 3.4.0, 3.5.0 and 3.6.0
Ensures BaGetter can locate its configuration file in a cross-platform manner. Previously, the application only looked for the config file in a Windows-specific location. This change adds support for Linux by searching for a config file in `/etc/BaGetter` if the application is not running on Windows.
Adds validation to ensure the registration page size is greater than zero, preventing potential errors. Also, enhances the package content controller to accurately detect image content types, improving the user experience when retrieving package icons. Adds tests to ensure registration page size validation and correct paging when registration page size is small.
Implements HTTP caching using ETags to improve performance. The server now returns 304 Not Modified if the client's cache is up to date. This reduces bandwidth usage and improves response times. Also adds request telemetry using metrics and logging. This provides insights into the performance and usage of the service.
Adds "must-revalidate" and "immutable" cache control directives to HTTP responses. This change enhances caching behavior by specifying whether the cache needs to revalidate its entries with the origin server and defining content as immutable, improving performance.
Adds request rate limiting, HTTP caching/compression, and HTTP request telemetry. Also loads configuration from OS-level locations and includes documentation updates related to publishing to IIS. The rate limiting feature can be enabled to prevent abuse of the BaGetter instance.
Allows configuration of CORS policy and security headers via appsettings.json. Adds a PowerShell script to simplify IIS publishing. This provides greater control over security aspects of the BaGetter instance.
Updates tests to assert that the service index entry count is greater than or equal to the expected minimum, rather than strictly equal. This change accommodates potential variations in the number of service index entries without causing test failures, providing more flexibility and resilience.
Implements audit logging for package mutation operations, enhancing traceability through actor and client IP metadata. Introduces search reindexing functionality, allowing rebuild of the search index from packages stored in the database, either manually via CLI or automatically as a background service with configurable intervals and batch sizes. Adds stricter validation to the configuration options to ensure proper configuration.
Adds an operations playbook for deployment, validation, and troubleshooting. Enhances documentation with debugging guidance, configuration validation rules, and script usage examples. Improves the overall operational experience by providing tools and documentation for maintaining a BaGetter instance.
Enables configuration of multiple upstream NuGet package mirrors for read-through caching. When multiple mirrors are configured, BaGetter will attempt to retrieve packages from each mirror in order, falling back to the next if a package is not found. If no mirrors are configured, BaGetter will use the legacy single mirror setting. This change introduces a new `Mirrors` configuration option, alongside the existing `Mirror` option, and updates the dependency injection to handle multiple upstream clients.
Adds theming support to the web UI via CSS custom properties, allowing for easier customization and dark mode support. Updates the UI with modern fonts for improved aesthetics and readability. Removes unused FallbackUpstreamClient. Adjusts image styling for package icons on index and package pages.
Enables BaGetter to run as a native Windows Service, providing an alternative to IIS hosting. This includes a new command-line interface for installing and uninstalling the service, as well as documentation on how to use this new feature. Also updates target framework to .NET 10 to utilize latest features.
Allows storing hashed API keys and passwords in the configuration file, improving security. A new `hash` command is added to the CLI to generate the PBKDF2 hashes. The authentication logic is updated to verify secrets against their hashed values.
Net10 update and more
Allows administrators to delete packages and specific package versions through the web interface. This functionality is protected by role-based access control, requiring users to have the "Admin" role and valid API key. Also adds the ability to assign roles to users through the configuration file. Packages can be re-pushed if they are soft-deleted (unlisted) even when overwrite is disabled.
Implements search functionality that filters packages by tag and author. Adds tag: and author: prefixes to the search query to filter results by the specified tag or author, respectively. Updates the UI to provide links to search results filtered by tag or author.
Enables localization support for the web user interface, allowing users to view the UI in their preferred language. This includes: - Adding a LocalizationOptions to configure localization behavior. - Adding resource files for multiple languages. - Adding a language selection dropdown to the layout. - Localizing text on various pages.
Introduces LDAP-backed authentication for package feeds using System.DirectoryServices.Protocols. This allows users to authenticate with directory credentials (including domain\user and UPN formats) and supports role mapping via LDAP groups. The change refactors basic authentication into a pluggable validator strategy, supporting both local configuration-based credentials and directory services. Includes updated documentation, configuration validation, and cross-platform compatibility notes for Linux and macOS deployments.
…ation - Upgrades application and Docker images to .NET 10. - Adds GitHub Actions workflow for automated image building and publishing to GHCR. - Conditionally applies IIS server options only on Windows to enhance cross-platform compatibility.
Wire an optional `bagetter-mirror` Secret into the chart via envFrom (the pod still starts if it's absent, mirroring just stays off), and document the multi-mirror env layout with a mirror-secret.example.yaml covering DevExpress (v2/Legacy, key-in-URL) and Hangfire Pro/Ace (v2/Legacy, Basic auth). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01753MpyJDLxuXgmFT25x4br
Bring the devop BaGetter mirror onto the same delivery path as DevOp.Nexus (previously GitHub Actions -> GHCR + manual kubectl). Adds: - Jenkinsfile: dind/build/helm pod; build image -> push registry.devop.is/nexus/bagetter -> helm upgrade --install bagetter. Params for env/version/push/deploy. - chart/bagetter/values-prod.yaml: Harbor image + pull secret, nuget.devop.is ingress (traefik + bagetter-tls), existing bagetter-data PVC, mirror/secret refs. - chart/bagetter/README-cd.md: job setup, one-time migration prerequisites, and the PostgreSQL migration that removes the build-side restore throttle. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Gq1Nwm9wGsRmHCGBh4N77
FallbackUpstreamClient returned the first non-empty upstream's version/metadata list, so a package present on several feeds was served by only one — letting nuget.org's stale Hangfire.Throttling 1.0.0-beta1 shadow the licensed feed's 1.4.3. List endpoints now UNION versions/metadata across all upstreams (deduped; earlier upstream wins per version). Downloads still use the first upstream that has the package. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Gq1Nwm9wGsRmHCGBh4N77
StatefulSet + headless Service for bagetter-postgres in the bagetter namespace, so BaGetter can move off SQLite (concurrent-write "database is locked" 500s) to Postgres. Config-only switch (BaGetter.Database.PostgreSql provider already ships); lets the build-side maxHttpRequestsPerSource=1 throttle be removed afterward. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Gq1Nwm9wGsRmHCGBh4N77
The version/metadata listings now union across all upstreams instead of returning the first non-empty result, so the old Assert.Same test no longer applies. Assert union (deduped) for versions and metadata (earlier mirror wins per version). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Gq1Nwm9wGsRmHCGBh4N77
values-prod.yaml now mirrors the live (formerly hand-rolled) deployment exactly: PostgreSQL DB via the bagetter-db secret, Storage__Path=/data/packages, the explicit ApiKey + Authentication__Credentials env from bagetter-secret, and the bagetter-mirror upstreams via envFrom. Lets Helm take over the live deployment without config drift. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Gq1Nwm9wGsRmHCGBh4N77
The build passed the bare git sha (e.g. ba1a9e2) as the assembly Version, which NuGet rejects ("not a valid version string"). The image tag stays sha-based; the Version build-arg now falls back to 1.0.0 for sha builds (or uses VERSION_OVERRIDE). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Gq1Nwm9wGsRmHCGBh4N77
Merge upstream BaGetter PR bagetter#269 (.NET 10, security, and improvements)
…e/UserSearchFilter
The committed appsettings.json enabled Authentication.Ldap, which makes the test host require authentication and fails integration tests with 401 (Run tests job). Local LDAP settings are moved to appsettings.Development.json, which is not loaded by tests/CI (Production environment).
…s repository The jobs were gated on github.repository == 'oahsiao/BaGetter', which never matches this fork, so Docker images and the BaGetter.zip release assets were skipped.
System.DirectoryServices.Protocols requires the native libldap on Linux (Interop.Ldap PInvoke). Without it, LDAP authentication fails with a DllInitialization error and every login attempt crashes the connection setup.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upgrades the target framework to .NET 10.
Updates several package versions to align with the new framework.
Removes obsolete Razor runtime compilation configuration.
Enforces authentication for Razor Pages.Summary of the changes (in less than 80 chars)
Addresses #123