- Notifications
You must be signed in to change notification settings - Fork72
Add Sonatype Nexus repository integration module#262
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Open
MAVRICK-1 wants to merge28 commits intocoder:mainChoose a base branch fromMAVRICK-1:feat/nexus-repository-module
base:main
Could not load branches
Branch not found:{{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline, and old review comments may become outdated.
Uh oh!
There was an error while loading.Please reload this page.
Open
Changes from22 commits
Commits
Show all changes
28 commits Select commitHold shift + click to select a range
e32a0b7
feat: add Sonatype Nexus repository integration module
MAVRICK-1e2d8aad
Update registry/mavrickrishi/modules/nexus/main.tf
MAVRICK-12a892ad
Update registry/mavrickrishi/modules/nexus/main.tf
MAVRICK-120e9a32
Update registry/mavrickrishi/modules/nexus/main.tf
MAVRICK-1af94e5b
fix: apply code formatting
MAVRICK-1db7afc8
fixed changes
MAVRICK-109905c3
Update registry/mavrickrishi/modules/nexus/README.md
MAVRICK-156f5990
Update registry/mavrickrishi/modules/nexus/main.tf
MAVRICK-13c890d0
Update registry/mavrickrishi/modules/nexus/main.tf
MAVRICK-188f8284
fix: update Nexus module configurations and README details
MAVRICK-1f375e5f
feat: add support for Go package manager in Nexus module and update R…
MAVRICK-197d144b
feat: add test for configuring Go module proxy in Nexus module
MAVRICK-11bd0085
feat: Add Nexus Repository module and related configurations
MAVRICK-11b01b37
Merge branch 'main' into feat/nexus-repository-module
MAVRICK-15534564
Delete .icons/nexus.svg
MAVRICK-10854c5e
fix: remove false positive entries from typos.toml and adjust usernam…
MAVRICK-1c520a19
fix: correct username entry for mavrickrishi in typos.toml
MAVRICK-1f42da8f
Merge branch 'main' into feat/nexus-repository-module
MAVRICK-19f2fe38
Merge branch 'main' into feat/nexus-repository-module
MAVRICK-10a10b4d
Merge branch 'main' into feat/nexus-repository-module
MAVRICK-18de8da8
Merge branch 'main' into feat/nexus-repository-module
DevelopmentCats0fd038a
Merge branch 'main' into feat/nexus-repository-module
DevelopmentCats9f2f3a4
Update registry/mavrickrishi/modules/nexus-repository/README.md
MAVRICK-14a45f09
Merge branch 'main' into feat/nexus-repository-module
MAVRICK-13bdcac7
chore: remove trailing newline from README.md
MAVRICK-1b25317a
Merge branch 'main' into feat/nexus-repository-module
MAVRICK-1013f756
fix: ensure consistent formatting in nexus repository tests and scripts
MAVRICK-15367304
Merge branch 'main' into feat/nexus-repository-module
DevelopmentCatsFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
2 changes: 2 additions & 0 deletions.github/typos.toml
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
84 changes: 84 additions & 0 deletions.icons/nexus-repository.svg
Loading
Sorry, something went wrong.Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletionsregistry/mavrickrishi/README.md
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
--- | ||
display_name: mavrickrishi | ||
bio: Coder module contributor | ||
github: mavrick-1 | ||
status: community | ||
--- | ||
# mavrickrishi | ||
This directory contains Coder modules and templates created by mavrickrishi. | ||
## Modules | ||
- [nexus-repository](./modules/nexus-repository/) - Configure package managers to use Sonatype Nexus Repository |
149 changes: 149 additions & 0 deletionsregistry/mavrickrishi/modules/nexus-repository/README.md
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
--- | ||
display_name:Sonatype Nexus Repository | ||
MAVRICK-1 marked this conversation as resolved. OutdatedShow resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||
description:Configure package managers to use Sonatype Nexus Repository for Maven, npm, PyPI, and Docker registries. | ||
icon:../../../../.icons/nexus-repository.svg | ||
verified:true | ||
tags:[integration, nexus-repository, maven, npm, pypi, docker] | ||
--- | ||
#Sonatype Nexus Repository | ||
Configure package managers (Maven, npm, Go, PyPI, Docker) to use[Sonatype Nexus Repository](https://help.sonatype.com/en/sonatype-nexus-repository.html) with API token authentication. This module provides secure credential handling, multiple repository support per package manager, and flexible username configuration. | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
maven = ["maven-public", "maven-releases"] | ||
npm = ["npm-public", "@scoped:npm-private"] | ||
go = ["go-public", "go-private"] | ||
pypi = ["pypi-public", "pypi-private"] | ||
docker = ["docker-public", "docker-private"] | ||
} | ||
} | ||
``` | ||
##Requirements | ||
- Nexus Repository Manager 3.x | ||
- Valid API token or user credentials | ||
- Package managers installed on the workspace (Maven, npm, Go, pip, Docker as needed) | ||
>[!NOTE] | ||
>This module configures package managers but does not install them. You need to handle the installation of Maven, npm, Go, Python pip, and Docker yourself. | ||
##Examples | ||
###Configure Maven to use Nexus repositories | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
maven = ["maven-public", "maven-releases", "maven-snapshots"] | ||
} | ||
} | ||
``` | ||
###Configure npm with scoped packages | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
npm = ["npm-public", "@mycompany:npm-private"] | ||
} | ||
} | ||
``` | ||
###Configure Go module proxy | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
go = ["go-public", "go-private"] | ||
} | ||
} | ||
``` | ||
###Configure Python PyPI repositories | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
pypi = ["pypi-public", "pypi-private"] | ||
} | ||
} | ||
``` | ||
###Configure Docker registries | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
docker = ["docker-public", "docker-private"] | ||
} | ||
} | ||
``` | ||
###Use custom username | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_username = "custom-user" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
maven = ["maven-public"] | ||
} | ||
} | ||
``` | ||
###Complete configuration for all package managers | ||
```tf | ||
module "nexus_repository" { | ||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder" | ||
version = "1.0.0" | ||
agent_id = coder_agent.example.id | ||
nexus_url = "https://nexus.example.com" | ||
nexus_password = var.nexus_api_token | ||
package_managers = { | ||
maven = ["maven-public", "maven-releases"] | ||
npm = ["npm-public", "@company:npm-private"] | ||
go = ["go-public", "go-private"] | ||
pypi = ["pypi-public", "pypi-private"] | ||
docker = ["docker-public", "docker-private"] | ||
} | ||
} | ||
``` |
135 changes: 135 additions & 0 deletionsregistry/mavrickrishi/modules/nexus-repository/main.test.ts
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
import { describe, expect, it } from "bun:test"; | ||
import { | ||
executeScriptInContainer, | ||
runTerraformApply, | ||
runTerraformInit, | ||
testRequiredVariables, | ||
} from "~test"; | ||
describe("nexus-repository", async () => { | ||
await runTerraformInit(import.meta.dir); | ||
testRequiredVariables(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-password" | ||
}); | ||
it("configures Maven settings", async () => { | ||
const state = await runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-token", | ||
package_managers: JSON.stringify({ | ||
maven: ["maven-public"] | ||
}) | ||
}); | ||
const output = await executeScriptInContainer(state, "ubuntu:20.04"); | ||
expect(output.stdout.join("\n")).toContain("☕ Configuring Maven..."); | ||
expect(output.stdout.join("\n")).toContain("🥳 Configuration complete!"); | ||
}); | ||
it("configures npm registry", async () => { | ||
const state = await runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-token", | ||
package_managers: JSON.stringify({ | ||
npm: ["npm-public"] | ||
}) | ||
}); | ||
const output = await executeScriptInContainer(state, "ubuntu:20.04"); | ||
expect(output.stdout.join("\n")).toContain("📦 Configuring npm..."); | ||
expect(output.stdout.join("\n")).toContain("🥳 Configuration complete!"); | ||
}); | ||
it("configures PyPI repository", async () => { | ||
const state = await runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-token", | ||
package_managers: JSON.stringify({ | ||
pypi: ["pypi-public"] | ||
}) | ||
}); | ||
const output = await executeScriptInContainer(state, "ubuntu:20.04"); | ||
expect(output.stdout.join("\n")).toContain("🐍 Configuring pip..."); | ||
expect(output.stdout.join("\n")).toContain("🥳 Configuration complete!"); | ||
}); | ||
it("configures multiple package managers", async () => { | ||
const state = await runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-token", | ||
package_managers: JSON.stringify({ | ||
maven: ["maven-public"], | ||
npm: ["npm-public"], | ||
pypi: ["pypi-public"] | ||
}) | ||
}); | ||
const output = await executeScriptInContainer(state, "ubuntu:20.04"); | ||
expect(output.stdout.join("\n")).toContain("☕ Configuring Maven..."); | ||
expect(output.stdout.join("\n")).toContain("📦 Configuring npm..."); | ||
expect(output.stdout.join("\n")).toContain("🐍 Configuring pip..."); | ||
expect(output.stdout.join("\n")).toContain("✅ Nexus repository configuration completed!"); | ||
}); | ||
it("handles empty package managers", async () => { | ||
const state = await runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-token", | ||
package_managers: JSON.stringify({}) | ||
}); | ||
const output = await executeScriptInContainer(state, "ubuntu:20.04"); | ||
expect(output.stdout.join("\n")).toContain("🤔 no maven repository is set, skipping maven configuration."); | ||
expect(output.stdout.join("\n")).toContain("🤔 no npm repository is set, skipping npm configuration."); | ||
expect(output.stdout.join("\n")).toContain("🤔 no pypi repository is set, skipping pypi configuration."); | ||
expect(output.stdout.join("\n")).toContain("🤔 no docker repository is set, skipping docker configuration."); | ||
}); | ||
it("configures Go module proxy", async () => { | ||
const state = await runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-token", | ||
package_managers: JSON.stringify({ | ||
go: ["go-public", "go-private"] | ||
}) | ||
}); | ||
const output = await executeScriptInContainer(state, "ubuntu:20.04"); | ||
expect(output.stdout.join("\n")).toContain("🐹 Configuring Go..."); | ||
expect(output.stdout.join("\n")).toContain("Go proxy configured via GOPROXY environment variable"); | ||
expect(output.stdout.join("\n")).toContain("🥳 Configuration complete!"); | ||
}); | ||
it("validates nexus_url format", async () => { | ||
await expect( | ||
runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "invalid-url", | ||
nexus_password: "test-token", | ||
package_managers: JSON.stringify({}) | ||
}) | ||
).rejects.toThrow(); | ||
}); | ||
it("validates username_field values", async () => { | ||
await expect( | ||
runTerraformApply(import.meta.dir, { | ||
agent_id: "test-agent", | ||
nexus_url: "https://nexus.example.com", | ||
nexus_password: "test-token", | ||
username_field: "invalid", | ||
package_managers: JSON.stringify({}) | ||
}) | ||
).rejects.toThrow(); | ||
}); | ||
}); |
Oops, something went wrong.
Uh oh!
There was an error while loading.Please reload this page.
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.