← 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

go-use symlink-resolution fix for relative `replace` directives in dependency go.mod files; changes requested, 3 unresolved comments, test-other-plugins and title-policy CI failing, author moved the approach to PR #1466.

Suggested action: close superseded

Reason: The author explicitly abandoned this approach: "The fix didn't pass the test ... I think I found more of an issue than we faced before (which requires a bigger solution)" and later "For now, I created a new PR #1466 which implements the 'comment out' ... of those replace statements by the go-use plugin," after @tigarmo steered him to the go-work replace-conflict rationale. The PR is left with changes_requested and 3 unresolved review comments, a failing test-other-plugins matrix (the author himself notes a broken expectation in test_get_build_commands_go_use_with_go_dependency, which still exists in tests/unit/plugins/test_go_plugin.py), and a failing Conventional Commits title check, with no maintainer activity for 223 days.

Evaluated by: mr-cal-bot

Impact: 28 Quick Win: 1 Complexity: 42 Confidence: 88 Actionability: 8

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
stealth/space-bunny-alpha
Impact: 28
Quick Win: 1
Complexity: 42
Confidence: 88
Actionability: 8
close superseded go-use symlink-resolution fix for relative `replace` directives in dependency go.mod files; changes requested, 3 unresolved comments, test-other-plugins and title-policy CI failing, author moved the approach to PR #1466.
qwen/qwen3.6-35b-a3b
Impact: 40
Quick Win: 4
Complexity: 55
Confidence: 90
Actionability: 20
close superseded Fixes go-use plugin to handle replace directives in go.mod by resolving symlinks. Superseded by PR #1466 which implements a different approach (commenting out replace statements). Author acknowledges the superseding PR.
qwen/qwen3.8-27b
Impact: 45
Quick Win: 18
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.

Update history

No update history recorded yet.

Related work

  • Superseded By: canonical/craft-parts#1466 (confidence 92%)

    Author states he created #1466 to implement the maintainer-preferred 'comment out relative replace statements' approach; that PR is open, and a maintainer there noted the *-use plugins are obsolete post-Madrid.

  • Related To: canonical/craft-parts#1478 (confidence 55%)

    Later merged commit e5af6aab 'feat(go-use): error early if go.mod is missing' also modifies craft_parts/plugins/go_use_plugin.py, the same file this PR changes.

Related issues

Issue Project State Summary Similarity
#1466 feat: Comment out replace statements to relative paths in go.mod craft-parts open Adds awk-based stripping of relative replace directives in go.mod to the go-use plugin, plus an integration test. Its go.mod existence check was already merged separately; maintainer says *-use plugins are obsolete post-Madrid.
73%