feat: add Puppet Forge remote type #44

Merged
unkinben merged 1 commits from feat/puppet-forge-remote into master 2026-05-17 10:56:51 +10:00
Owner

Summary

  • Adds `package: puppet` for proxying Puppet Forge (forgeapi.puppet.com)
  • `remote/puppet.py` rewrites JSON responses: absolute forge URLs → proxy URLs, and relative `/v3/files/` `file_uri` paths → absolute proxy URLs. g10k uses Go's `url.ResolveReference`, so an absolute `file_uri` overrides the base URL entirely — tarballs are fetched directly from the proxy without a second hop
  • Built-in mutable patterns: `^v3/modules/` and `^v3/releases` (module metadata); tarballs at `v3/files/` are configured as immutable via `immutable_patterns`
  • 9 new tests covering mutable detection, URL rewriting (relative `file_uri` and absolute forge URLs), content-type, tarball pass-through, and pattern blocking

Client configuration

g10k config file (`forge_base_url` at root level):
```yaml
cachedir: /tmp/g10k
forge_base_url: https://artifacts.example.com/api/v1/remote/puppet-forge
sources:
control:
remote: git@git.example.com:puppet/control.git
basedir: /etc/puppetlabs/code/environments
```

Puppetfile (`forge.baseUrl` directive, works with `-puppetfile` mode):
```ruby
forge.baseUrl https://artifacts.example.com/api/v1/remote/puppet-forge

mod 'puppetlabs-stdlib', '9.7.0'
```

Test plan

  • 331 unit tests pass (`make test`)
  • End-to-end: g10k 0.9.10 on AlmaLinux 9 via `forge_base_url` — stdlib 9.7.0, inifile 6.2.0, concat 9.1.0 installed; proxy logs confirm cache MISS → fetch → ADD for metadata and tarballs
  • End-to-end: `forge.baseUrl` Puppetfile directive with `-puppetfile` mode — same result
## Summary - Adds \`package: puppet\` for proxying Puppet Forge (forgeapi.puppet.com) - \`remote/puppet.py\` rewrites JSON responses: absolute forge URLs → proxy URLs, and relative \`/v3/files/\` \`file_uri\` paths → absolute proxy URLs. g10k uses Go's \`url.ResolveReference\`, so an absolute \`file_uri\` overrides the base URL entirely — tarballs are fetched directly from the proxy without a second hop - Built-in mutable patterns: \`^v3/modules/\` and \`^v3/releases\` (module metadata); tarballs at \`v3/files/\` are configured as immutable via \`immutable_patterns\` - 9 new tests covering mutable detection, URL rewriting (relative \`file_uri\` and absolute forge URLs), content-type, tarball pass-through, and pattern blocking ## Client configuration **g10k config file** (\`forge_base_url\` at root level): \`\`\`yaml cachedir: /tmp/g10k forge_base_url: https://artifacts.example.com/api/v1/remote/puppet-forge sources: control: remote: git@git.example.com:puppet/control.git basedir: /etc/puppetlabs/code/environments \`\`\` **Puppetfile** (\`forge.baseUrl\` directive, works with \`-puppetfile\` mode): \`\`\`ruby forge.baseUrl https://artifacts.example.com/api/v1/remote/puppet-forge mod 'puppetlabs-stdlib', '9.7.0' \`\`\` ## Test plan - [x] 331 unit tests pass (\`make test\`) - [x] End-to-end: g10k 0.9.10 on AlmaLinux 9 via \`forge_base_url\` — stdlib 9.7.0, inifile 6.2.0, concat 9.1.0 installed; proxy logs confirm cache MISS → fetch → ADD for metadata and tarballs - [x] End-to-end: \`forge.baseUrl\` Puppetfile directive with \`-puppetfile\` mode — same result
unkinben added 1 commit 2026-05-17 10:50:56 +10:00
feat: add puppet forge remote type
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/build Pipeline was successful
5912e3ae3c
Adds package: puppet for proxying the Puppet Forge API (forgeapi.puppet.com).

- remote/puppet.py: rewrites absolute forge URLs and relative /v3/files/
  paths in JSON responses to absolute proxy URLs; g10k uses
  url.ResolveReference so absolute file_uri values override the base
  entirely, meaning tarball downloads go straight to the proxy
- config.py: registers built-in mutable patterns for v3/modules/ and
  v3/releases (module metadata pages)
- artifact/proxy.py: dispatches to puppet.resolve_content for package:
  puppet remotes
- 9 new tests covering mutable detection, URL rewriting (relative and
  absolute), content-type, tarball pass-through, and pattern blocking

Client configuration (g10k):
  - config file: forge_base_url: https://artifacts.example.com/api/v1/remote/puppet-forge
  - Puppetfile: forge.baseUrl https://artifacts.example.com/api/v1/remote/puppet-forge
unkinben merged commit 9287cf7cf2 into master 2026-05-17 10:56:51 +10:00
unkinben deleted branch feat/puppet-forge-remote 2026-05-17 10:56:51 +10:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unkin/artifactapi#44