← Back to issue list

go-use test isn't working on arm64 github-hosted runners

View original Github issue

Metadata

Project
craft-parts
Number
#1313
Type
issue
State
open
Author
lengau
Labels
Status: Triaged Type: Bug
Created
Updated
Closed

Current evaluation

test_go_use fails on github-hosted arm64 runners because the test needs go 1.24 but runners have go 1.22 with downloads disabled. Triaged by maintainer; test is currently skipped on aarch64 github-hosted runners referencing this issue (#1313).

Suggested action: keep open

Reason: The issue is triaged (labeled Status: Triaged, Type: Bug) and the test still carries a skipif marker referencing this exact issue (#1313) in tests/integration/plugins/test_go.py, meaning the underlying problem (go 1.24 requirement vs go 1.22 on arm64 runners with GOPROXY=off) remains unresolved. A related commit 'ci: fix go_use test (#1455)' exists but the skip is still present in current code, so the issue should stay open until the runner Go version is bumped or the test is re-enabled.

Impact: 25 Quick Win: 17.5 Staleness: 55 Complexity: 30 Confidence: 80 Support Request: 0

Issue body

### Bug Description `tests/integration/plugins/test_go.py::test_go_use` is failing on github-hosted arm64 runners. This is because we need go 1.24 but the runners have go 1.22 and we've disabled downloading go. ### To Reproduce https://github.com/canonical/craft-parts/actions/runs/17783205133/job/50546068446?pr=1311 ### part yaml ```shell ``` ### Relevant log output ```shell ______________________________ test_go_use[none] _______________________________ self = <craft_parts.executor.step_handler.StepHandler object at 0xffe0bdd8a180> def _builtin_build(self) -> StepContents: # Plugin commands. build_commands = self._plugin.get_build_commands() # save script to set the build environment build_environment_script_path = ( self._part.part_run_dir.absolute() / "environment.sh" ) build_environment_script_path.write_text(self._env) build_environment_script_path.chmod(0o644) try: > _create_and_run_script( build_commands, script_path=self._part.part_run_dir.absolute() / "build.sh", environment_script_path=build_environment_script_path, cwd=self._part.part_build_subdir, stdout=self._stdout, stderr=self._stderr, ) /home/runner/work/craft-parts/craft-parts/craft_parts/executor/step_handler.py:179: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /home/runner/work/craft-parts/craft-parts/craft_parts/executor/step_handler.py:564: in _create_and_run_script process.run( /home/runner/work/craft-parts/craft-parts/craft_parts/utils/process.py:186: in run result.check_returncode() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = ProcessResult(returncode=1, stdout=b'', stderr=b'+ go work init .\n+ go work use .\n+ go work use /tmp/pytest-of-runne...d by GOPROXY=off\n', command=[PosixPath('/tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/hello/run/build.sh')]) def check_returncode(self) -> None: """Raise an exception if the process returned non-zero.""" if self.returncode != 0: > raise ProcessError(self) E craft_parts.utils.process.ProcessError: ProcessResult(returncode=1, stdout=b'', stderr=b'+ go work init .\n+ go work use .\n+ go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/go-flags\n+ go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/sys\ngo: ../../../backstage/go-use/sys/go.mod requires go >= 1.24.0 (running go 1.22.2)\ngo: switching to go >= 1.24.0: module lookup disabled by GOPROXY=off\n', combined=b'+ go work init .\n+ go work use .\n+ go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/go-flags\n+ go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/sys\ngo: ../../../backstage/go-use/sys/go.mod requires go >= 1.24.0 (running go 1.22.2)\ngo: switching to go >= 1.24.0: module lookup disabled by GOPROXY=off\n', command=[PosixPath('/tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/hello/run/build.sh')]) /home/runner/work/craft-parts/craft-parts/craft_parts/utils/process.py:52: ProcessError The above exception was the direct cause of the following exception: new_dir = local('/tmp/pytest-of-runner/pytest-0/test_go_use_none_0') partitions = None def test_go_use(new_dir, partitions): # Ensure we're not using cached sources source_location = Path(__file__).parent / "test_go_workspace" (new_dir / "go-cache").mkdir() parts_yaml = textwrap.dedent( f""" parts: sys: source: https://go.googlesource.com/sys source-type: git plugin: go-use go-flags: source: https://github.com/jessevdk/go-flags.git plugin: go-use source-tag: v1.6.1 build-environment: - GOPROXY: "off" hello: after: - go-flags - sys plugin: go source: {source_location} build-environment: - GO111MODULE: "on" - GOPROXY: "off" - GOFLAGS: "-json" - GOMODCACHE: {new_dir / "go-cache"} """ ) parts = yaml.safe_load(parts_yaml) lf = LifecycleManager( parts, application_name="test_go", cache_dir=new_dir, work_dir=new_dir, partitions=partitions, ) actions = lf.plan(Step.PRIME) with lf.action_executor() as ctx: > ctx.execute(actions) /home/runner/work/craft-parts/craft-parts/tests/integration/plugins/test_go.py:170: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /home/runner/work/craft-parts/craft-parts/craft_parts/executor/executor.py:359: in execute self._executor.execute(actions, stdout=stdout, stderr=stderr) /home/runner/work/craft-parts/craft-parts/craft_parts/executor/executor.py:153: in execute self._run_action(act, stdout=stdout, stderr=stderr) /home/runner/work/craft-parts/craft-parts/craft_parts/executor/executor.py:246: in _run_action handler.run_action(action, stdout=stdout, stderr=stderr) /home/runner/work/craft-parts/craft-parts/craft_parts/executor/part_handler.py:313: in run_action state = handler(step_info, stdout=stdout, stderr=stderr) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /home/runner/work/craft-parts/craft-parts/craft_parts/executor/part_handler.py:461: in _run_build self._run_step( /home/runner/work/craft-parts/craft-parts/craft_parts/executor/part_handler.py:678: in _run_step return step_handler.run_builtin() ^^^^^^^^^^^^^^^^^^^^^^^^^^ /home/runner/work/craft-parts/craft-parts/craft_parts/executor/step_handler.py:139: in run_builtin return handler() ^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <craft_parts.executor.step_handler.StepHandler object at 0xffe0bdd8a180> def _builtin_build(self) -> StepContents: # Plugin commands. build_commands = self._plugin.get_build_commands() # save script to set the build environment build_environment_script_path = ( self._part.part_run_dir.absolute() / "environment.sh" ) build_environment_script_path.write_text(self._env) build_environment_script_path.chmod(0o644) try: _create_and_run_script( build_commands, script_path=self._part.part_run_dir.absolute() / "build.sh", environment_script_path=build_environment_script_path, cwd=self._part.part_build_subdir, stdout=self._stdout, stderr=self._stderr, ) except process.ProcessError as process_error: > raise errors.PluginBuildError( part_name=self._part.name, plugin_name=self._part.plugin_name, stderr=process_error.result.stderr, ) from process_error E craft_parts.errors.PluginBuildError: Failed to run the build script for part 'hello'. E E :: + go work use . E :: + go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/go-flags E :: + go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/sys E :: go: ../../../backstage/go-use/sys/go.mod requires go >= 1.24.0 (running go 1.22.2) E :: go: switching to go >= 1.24.0: module lookup disabled by GOPROXY=off E Check the build output and verify the project can work with the 'go' plugin. /home/runner/work/craft-parts/craft-parts/craft_parts/executor/step_handler.py:188: PluginBuildError ------------------------------ Captured log setup ------------------------------ WARNING root:features.py:42 deleting current features configuration ----------------------------- Captured stderr call ----------------------------- + mkdir -p /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/go-flags/export/go-use + ln -sf /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/go-flags/src /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/go-flags/export/go-use/go-flags + mkdir -p /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/sys/export/go-use + ln -sf /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/sys/src /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/parts/sys/export/go-use/sys + go work init . + go work use . + go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/go-flags + go work use /tmp/pytest-of-runner/pytest-0/test_go_use_none_0/backstage/go-use/sys go: ../../../backstage/go-use/sys/go.mod requires go >= 1.24.0 (running go 1.22.2) go: switching to go >= 1.24.0: module lookup disabled by GOPROXY=off ```

Evaluation history

Date Model Scores Action Summary
qwen/qwen3.8-27b
Impact: 25
Quick Win: 17.5
Staleness: 55
Complexity: 30
Confidence: 80
Support Request: 0
keep open test_go_use fails on github-hosted arm64 runners because the test needs go 1.24 but runners have go 1.22 with downloads disabled. Triaged by maintainer; test is currently skipped on aarch64 github-hosted runners referencing this issue (#1313).
qwen/qwen3.6-35b-a3b
Staleness: 85
Complexity: 30
Confidence: 85
Support Request: 5
close stale Integration test test_go_use fails on arm64 GitHub runners due to a Go version mismatch (requires 1.24, runners have 1.22). Triaged but inactive for over a year.
qwen3.6-35b-a3b-mtp-q6
Staleness: 85
Complexity: 15
Confidence: 80
Support Request: 0
close stale Integration test test_go_use fails on arm64 GitHub runners due to a Go version mismatch (requires 1.24, runners have 1.22) with GOPROXY disabled. Triaged but inactive for 295 days.
qwen3.6-35b-a3b-mtp-q6
Staleness: 78
Complexity: 20
Confidence: 75
Support Request: 0
close stale test_go_use fails on arm64 GitHub runners due to a Go version mismatch. The test requires Go 1.24, but runners provide 1.22 and downloading is disabled. Status is triaged and awaiting implementation.

Update history

No update history recorded yet.

Related work

  • Related To: craft-parts#1455 (confidence 70%)

    Commit 'ci: fix go_use test (#1455)' touched the same test file, but the aarch64 skipif referencing #1313 is still present, so it did not fully resolve this issue.

  • Related To: craft-parts#1311 (confidence 60%)

    PR #1311 ('ci: test non java/python plugins on more platforms') is the CI change that surfaced this failure on arm64 runners, per the reproduction link in the issue body.

Related issues

Issue Project State Summary Similarity
#1281 go-use go plugin test fails on non-amd64 architectures craft-parts open test_go_use fails on arm64 due to missing Go toolchain. Superseded by issue #1313 which is the active tracking issue; test is already skipped on aarch64 with a reference to #1313. This issue has 0 comments, no labels, and no maintainer interaction in 356 days.
82%