aquaproj / aqua

Declarative CLI Version manager written in Go. Support Lazy Install, Registry, and continuous update with Renovate. CLI version is switched seamlessly
https://aquaproj.github.io
829 stars 35 forks source link

Execution of shellcheck via actionlint fails with `call execve(2): text file busy` #3093

Closed yamoyamoto closed 2 days ago

yamoyamoto commented 3 days ago

aqua info

$ aqua info
{
  "version": "2.31.0",
  "os": "linux",
  "arch": "amd64",
  "pwd": "<secret>",
  "root_dir": "/home/(USER)/.local/share/aquaproj-aqua",
  "env": {
    "AQUA_LOG_LEVEL": "debug"
  },
  "config_files": [
    {
      "path": "<secret>"
    }
  ]
}

Overview

I am using aqua's Lazy Install to execute https://github.com/rhysd/actionlint and https://github.com/koalaman/shellcheck in a GitHub Actions Workflow.

Since actionlint runs shellcheck in parallel, the issue discussed in https://github.com/aquaproj/aqua/issues/537 is reproduced, causing retries that ultimately fail with the error call execve(2): text file busy.

How to reproduce

aqua.yaml

registries:
- type: standard
  ref: v4.219.0 # renovate: depName=aquaproj/aqua-registry
packages:
- name: rhysd/actionlint@v1.7.1
- name: koalaman/shellcheck@v0.10.0

Other related code such as local Registry

Debug output

time="2024-09-17T08:10:13Z" level=debug msg="no version_constraint" aqua_version=2.31.0 env=linux/amd64 exe_name=actionlint package_name=rhysd/actionlint program=aqua registry_name=standard
time="2024-09-17T08:10:13Z" level=debug msg="installing the package" aqua_version=2.31.0 env=linux/amd64 exe_name=actionlint package_name=rhysd/actionlint package_version=v1.7.1 program=aqua registry=standard
time="2024-09-17T08:10:13Z" level=debug msg="check if the package is already installed" aqua_version=2.31.0 env=linux/amd64 exe_name=actionlint package_name=rhysd/actionlint package_version=v1.7.1 program=aqua registry=standard
time="2024-09-17T08:10:13Z" level=info msg="download and unarchive the package" aqua_version=2.31.0 env=linux/amd64 exe_name=actionlint package_name=rhysd/actionlint package_version=v1.7.1 program=aqua registry=standard
time="2024-09-17T08:10: level=debug msg="check the permission" aqua_version=2.31.0 env=linux/amd64 exe_name=actionlint file_name=actionlint package_name=rhysd/actionlint package_version=v1.7.1 program=aqua registry=standard
time="2024-09-17T08:10:14Z" level=debug msg="check if exec file exists" aqua_version=2.31.0 env=linux/amd64 exe_name=actionlint package_name=rhysd/actionlint package_version=v1.7.1 program=aqua
time="2024-09-17T08:10:14Z" level=debug msg="execute the command" aqua_version=2.31.0 env=linux/amd64 exe_name=actionlint package_name=rhysd/actionlint package_version=v1.7.1 program=aqua

fatal error while checking .github/workflows/release.yaml: `/home/runner/.local/share/aquaproj-aqua/bin/shellcheck --norc -f json -x --shell bash -e SC1091,SC2194,SC2050,SC2154,SC2157 -` did not run successfully while checking script at line:35,col:9: /home/runner/.local/share/aquaproj-aqua/bin/shellcheck exited with status 1 but stdout was empty. stderr: "time=\"2024-09-17T08:10:15Z\" level=debug msg=\"no version_constraint\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=rhysd/actionlint program=aqua registry_name=standard\ntime=\"2024-09-17T08:10:15Z\" level=debug msg=\"no version_constraint\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=suzuki-shunsuke/ghalint program=aqua registry_name=standard\ntime=\"2024-09-17T08:10:15Z\" level=debug msg=\"match the version_constraint\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=suzuki-shunsuke/github-comment package_semver=v6.2.0 package_version=v6.2.0 program=aqua registry_name=standard version_constraint=\"semver(\\\">= 5.0.2\\\")\"\ntime=\"2024-09-17T08:10:15Z\" level=debug msg=\"no version_constraint\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck program=aqua registry_name=standard\ntime=\"2024-09-17T08:10:15Z\" level=debug msg=\"installing the package\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua registry=standard\ntime=\"2024-09-17T08:10:15Z\" level=debug msg=\"check if the package is already installed\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua registry=standard\ntime=\"2024-09-17T08:10:15Z\" level=info msg=\"download and unarchive the package\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua registry=standard\ntime=\"2024-09-17T08:10:16Z\" level=info msg=\"retry installing the package\" aqua_version=2.31.0 env=linux/amd64 error=\"reading file in tar archive: file already exists: /home/runner/.local/share/aquaproj-aqua/pkgs/github_release/github.com/koalaman/shellcheck/v0.10.0/shellcheck-v0.10.0.linux.x86_64.tar.xz/shellcheck-v0.10.0/LICENSE.txt\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua registry=standard retry_count=1\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"check if the package is already installed\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua registry=standard\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"check the permission\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck file_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua registry=standard\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"check if exec file exists\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=1\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=2\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=3\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=4\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=5\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=6\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=7\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=8\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=9\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"execute the command\" aqua_version=2.31.0 env=linux/amd64 exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\ntime=\"2024-09-17T08:10:16Z\" level=debug msg=\"the process isn't started. retry\" aqua_version=2.31.0 env=linux/amd64 error=\"call execve(2): text file busy\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua retry_count=10\ntime=\"2024-09-17T08:10:16Z\" level=fatal msg=\"aqua failed\" aqua_version=2.31.0 env=linux/amd64 error=\"it failed to start the process\" exe_name=shellcheck package_name=koalaman/shellcheck package_version=v0.10.0 program=aqua\n"

Expected behaviour

The binary download via shellcheck's Lazy Install should be executed properly, and the tool should run successfully.

Actual behaviour

After a few retries, the download fails with the error call execve(2): text file busy, caused by shellcheck's Lazy Install.

Note

suzuki-shunsuke commented 3 days ago

This is a known issue. The workaround would work fine.

suzuki-shunsuke commented 3 days ago

I remembered the related proposal.

yamoyamoto commented 2 days ago

Thank you for your replies. I understand the situation.

We will proceed with the workaround as suggested, pre-installing shellcheck instead of using Lazy Install. This should help address the issue we're encountering.

I appreciate you sharing the link to the related proposal as well. It will be helpful for reference.

yamoyamoto commented 2 days ago

I will close this Issue as it is a known issue.