← Back to issue list

Fix the use of go-use (Go Workspaces) when using dependencies that include `replace <dep> => <relative path` in the go.mod file

View original Github issue

Metadata

Project
craft-parts
Number
#1391
Type
pull request
State
open
Author
atandrewlee
Labels
Created
Updated
Closed

Current evaluation

Fixes go-use failing on deps with relative `replace` directives in go.mod by resolving symlinks to absolute paths. Changes requested; author abandoned this approach and opened PR #1466 implementing the maintainer-endorsed 'comment out replace' fix instead.

Suggested action: close stale

Reason: The author explicitly stated 'I created a new PR #1466 which implements the comment out of those replace statements by the go-use plugin' after maintainer tigarmo recommended removing/commenting out the conflicting replace directives rather than the symlink-resolution approach this PR uses. This PR is therefore superseded by #1466 (still open), has been inactive for 192 days, and carries a changes_requested review with 3 unresolved comments, so it is no longer the path forward.

Impact: 45 Quick Win: 18.0 Staleness: 82 Complexity: 60 Confidence: 78

Issue body

> Hello. I'm a 1st time contributor & I will have a ton of question & not know a lot. I hope to learn & help contribute to the project. # The Problem Currently, if you want to use a submodule as a dependency in Go, you would import the source (from the root module) and then using `source-subdir` point to the submodule. However, there is a problem. In the `go.mod` files for these modules, there sometimes are `replace` statements that point to relative paths (within its own repository structure) > Example: go.opentelemetry.io/otel (Root Module) -> go.opentelemetry.io/otel/metric (Submodule = metric) ``` # go.mod file for go.opentelemetry.io/otel/metric replace go.opentelemetry.io/otel => ../ replace go.opentelemetry.io/otel/trace => ../trace ``` ``` # parts.yaml parts: otel-trace: # can be any name plugin: go-use source: <otel-monorepo> source-subdir: trace ``` When Go tries to resolve these dependencies, the replace statements look to a relative path, but because of the parts structure ($CRAFT_BACKSTAGE/go-use/<part-names>), when the Go plugin does a `go work use <>` on this path, the directory structure has changed, and therefore Go will error, saying that it can't find a dependency. In order to solve this, we have removed the replace statements directly from the dependency's go.mod file. However, this shouldn't be the case as then it cannot be built from scratch (without a craft tool). # The Solution The source of the issue is that the paths that `go work use` calls is a symlink. If we resolve the symlink to the absolute link, this solves the problem & we do not have to remove the replace statements from the go.mod file. # Additional Issues - [ ] When running `make test-fast`, there is a test that fails (`test_get_build_commands_go_use_with_go_dependency` in `tests/unit/plugins/test_go_plugin`). However, because of the solution, the expected behavior that this test tests for has changed. - [ ] Some of the integration tests fail, but they were failing before I made my change. - [ ] There's no issue for this. If this problem statement should be moved into an issue let's create that (I just didn't feel comfortable if I didn't do something according to protocol) - [ ] (Future Fix) Want to add a feature for go-use, but I think that's another PR # From The Template …work use - [ ] Have you followed the guidelines for contributing? - [ ] Have you signed the [CLA](http://www.ubuntu.com/legal/contributors/)? - [ ] Have you successfully run `make lint && make test`? - [ ] Have you added an entry to the changelog (`docs/reference/changelog.rst`)? ---

Evaluation history

Date Model Scores Action Summary
qwen/qwen3.8-27b
Impact: 45
Quick Win: 18.0
Staleness: 82
Complexity: 60
Confidence: 78
close stale Fixes go-use failing on deps with relative `replace` directives in go.mod by resolving symlinks to absolute paths. Changes requested; author abandoned this approach and opened PR #1466 implementing the maintainer-endorsed 'comment out replace' fix instead.
qwen/qwen3.6-35b-a3b
Staleness: 85
Complexity: 45
Confidence: 90
close stale Addresses Go workspace replace directive conflicts in the go-use plugin by resolving symlinks. Currently superseded by a newer PR implementing reviewer feedback.
qwen3.6-35b-a3b-mtp-q6
Staleness: 90
Complexity: 40
Confidence: 95
close stale Addresses go-workspace replace directive conflicts in the go-use plugin. Superseded by PR #1466 after maintainer feedback suggested modifying go.mod directives instead of resolving symlinks.
qwen3.6-35b-a3b-mtp-q6
Staleness: 90
Complexity: 40
Confidence: 95
close stale Fixes go-use failures with relative replace directives in dependency go.mod files. Maintainers suggested commenting out conflicting directives. Author adopted this approach and referenced a follow-up PR. Currently under discussion and awaiting review.

Update history

No update history recorded yet.

Related work

  • Duplicate Of: craft-parts#1466 (confidence 85%)

    Same author opened #1466 to implement the maintainer-endorsed 'comment out relative replace statements' solution, superseding this PR's symlink-resolution approach for the same go-use bug.

Related issues

Issue Project State Summary Similarity
#1466 feat: Comment out replace statements to relative paths in go.mod craft-parts open Adds go-use plugin logic to strip relative-path replace statements from go.mod, with integration tests. Changes requested; maintainer notes *-use plugins are obsolete post-Madrid, deferring to tigarmo on whether to adapt to the newer Go plugin.
71%