Skip to content

Indirect dependencies in dependent go modules need to be updated #12999

@eriksw

Description

@eriksw

What would you like Renovate to be able to do?

Because go modules include indirect dependencies in the go.mod and go.sum, when Renovate updates a go module, it also needs to update dependent modules.

Scenario:

monorepo/a:
    has a dependency that renovate is updating
monorepo/b:
    has a dependency on monorepo/a
    has a replace rule for monorepo/a => ../a
    does not directly import the library
    has "indirect" go.mod and go.sum entries for the dependencies of a because go adds/requires them now

When renovate updates monorepo/a/... it needs to also update monorepo/go/b/go.* at the same time, in the same commit.

Because renovate currently does not do this, the PR to update module a fails because we have a test that ensures our module files are always tidy. That fails because when the test runs go mod tidy in b, it is stale and updated/rewritten by the go mod tidy invocation in b, which updates b's indirect dependencies in go.mod and go.sum.

Reproduction repo/PR: eriksw/renovate-peer-go-mod-indirect#1

Log:

Details
DEBUG: No dangling containers to remove
INFO: Repository started
{
  "renovateVersion": "29.32.5"
}
DEBUG: Using localDir: /mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect
DEBUG: Repository cache not found
{
  "cacheFileName": "/tmp/renovate-cache/renovate/repository/github/eriksw/renovate-peer-go-mod-indirect.json"
}
DEBUG: initRepo("eriksw/renovate-peer-go-mod-indirect")
DEBUG: Overriding default GitHub endpoint
{
  "endpoint": "https://api.github.com/"
}
DEBUG: eriksw/renovate-peer-go-mod-indirect default branch = main
DEBUG: Using app token for git init
DEBUG: resetMemCache()
DEBUG: Resetting npmrc
DEBUG: detectSemanticCommits()
DEBUG: Initializing git repository into /mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect
DEBUG: Performing blobless clone
DEBUG: git clone completed
{
  "durationMs": 1234
}
DEBUG: latest repository commit
{
  "latestCommit": {
    "hash": "3d7e94578947ca98bffbd997a282b134ebbd1429",
    "date": "2021-12-07T12:53:59-08:00",
    "message": "Initial commit",
    "refs": "HEAD -> main, origin/main, origin/HEAD",
    "body": "",
    "author_name": "Erik Swanson",
    "author_email": "erik@retailnext.net"
  }
}
DEBUG: getCommitMessages
DEBUG: Semantic commits detection: unknown
DEBUG: No semantic commits detected
DEBUG: checkOnboarding()
DEBUG: isOnboarded()
DEBUG: findFile(renovate.json)
DEBUG: Config file exists
{
  "fileName": "renovate.json"
}
DEBUG: Retrieving issueList
DEBUG: Retrieved 0 issues
DEBUG: Repo is onboarded
DEBUG: Found renovate.json config file
DEBUG: Repository config
{
  "fileName": "renovate.json",
  "config": {
    "extends": [
      "config:base"
    ],
    "postUpdateOptions": [
      "gomodTidy",
      "gomodUpdateImportPaths"
    ],
    "prConcurrentLimit": 5,
    "rebaseWhen": "conflicted"
  }
}
DEBUG: migrateAndValidate()
DEBUG: No config migration necessary
DEBUG: massaged config
{
  "config": {
    "extends": [
      "github>whitesource/merge-confidence:beta",
      "config:base"
    ],
    "postUpdateOptions": [
      "gomodTidy",
      "gomodUpdateImportPaths"
    ],
    "prConcurrentLimit": 5,
    "rebaseWhen": "conflicted"
  }
}
DEBUG: migrated config
{
  "config": {
    "extends": [
      "github>whitesource/merge-confidence:beta",
      "config:base"
    ],
    "postUpdateOptions": [
      "gomodTidy",
      "gomodUpdateImportPaths"
    ],
    "prConcurrentLimit": 5,
    "rebaseWhen": "conflicted"
  }
}
DEBUG: Setting hostRules from config
DEBUG: Found repo ignorePaths
{
  "ignorePaths": [
    "**/node_modules/**",
    "**/bower_components/**",
    "**/vendor/**",
    "**/examples/**",
    "**/__tests__/**",
    "**/test/**",
    "**/tests/**",
    "**/__fixtures__/**"
  ]
}
DEBUG: No vulnerability alerts found
DEBUG: No vulnerability alerts found
DEBUG: findIssue(Dependency Dashboard)
DEBUG: No baseBranches
DEBUG: extract()
DEBUG: Setting current branch to main
DEBUG: latest commit
{
  "branchName": "main",
  "latestCommitDate": "2021-12-07T12:53:59-08:00"
}
DEBUG: Using file match: (^|/)tasks/[^/]+\.ya?ml$ for manager ansible
DEBUG: Using file match: (^|/)requirements\.ya?ml$ for manager ansible-galaxy
DEBUG: Using file match: (^|/)galaxy\.ya?ml$ for manager ansible-galaxy
DEBUG: Using file match: azure.*pipelines?.*\.ya?ml$ for manager azure-pipelines
DEBUG: Using file match: (^|/)batect(-bundle)?\.yml$ for manager batect
DEBUG: Using file match: (^|/)batect$ for manager batect-wrapper
DEBUG: Using file match: (^|/)WORKSPACE(|\.bazel)$ for manager bazel
DEBUG: Using file match: \.bzl$ for manager bazel
DEBUG: Using file match: (^|/)\.?bitbucket-pipelines\.ya?ml$ for manager bitbucket-pipelines
DEBUG: Using file match: buildkite\.ya?ml for manager buildkite
DEBUG: Using file match: \.buildkite/.+\.ya?ml$ for manager buildkite
DEBUG: Using file match: (^|/)Gemfile$ for manager bundler
DEBUG: Using file match: \.cake$ for manager cake
DEBUG: Using file match: (^|/)Cargo.toml$ for manager cargo
DEBUG: Using file match: (^|/).circleci/config.yml$ for manager circleci
DEBUG: Using file match: (^|/)cloudbuild.ya?ml for manager cloudbuild
DEBUG: Using file match: (^|/)Podfile$ for manager cocoapods
DEBUG: Using file match: (^|/)([\w-]*)composer.json$ for manager composer
DEBUG: Using file match: (^|/)deps\.edn$ for manager deps-edn
DEBUG: Using file match: (^|/)docker-compose[^/]*\.ya?ml$ for manager docker-compose
DEBUG: Using file match: (^|/|\.)Dockerfile$ for manager dockerfile
DEBUG: Using file match: (^|/)Dockerfile\.[^/]*$ for manager dockerfile
DEBUG: Using file match: (^|/).drone.yml$ for manager droneci
DEBUG: Using file match: (^|/).gitmodules$ for manager git-submodules
DEBUG: Using file match: ^(workflow-templates|\.github\/workflows)\/[^/]+\.ya?ml$ for manager github-actions
DEBUG: Using file match: (^|\/)action\.ya?ml$ for manager github-actions
DEBUG: Using file match: \.gitlab-ci\.yml$ for manager gitlabci
DEBUG: Using file match: \.gitlab-ci\.yml$ for manager gitlabci-include
DEBUG: Using file match: (^|/)go.mod$ for manager gomod
DEBUG: Using file match: \.gradle(\.kts)?$ for manager gradle
DEBUG: Using file match: (^|\/)gradle\.properties$ for manager gradle
DEBUG: Using file match: (^|\/)gradle\/.+\.toml$ for manager gradle
DEBUG: Using file match: \.versions\.toml$ for manager gradle
DEBUG: Using file match: (^|/)gradle/wrapper/gradle-wrapper.properties$ for manager gradle-wrapper
DEBUG: Using file match: (^|/)requirements\.yaml$ for manager helm-requirements
DEBUG: Using file match: (^|/)values.yaml$ for manager helm-values
DEBUG: Using file match: (^|/)helmfile.yaml$ for manager helmfile
DEBUG: Using file match: (^|/)Chart.yaml$ for manager helmv3
DEBUG: Using file match: ^Formula/[^/]+[.]rb$ for manager homebrew
DEBUG: Using file match: \.html?$ for manager html
DEBUG: Using file match: (^|/)plugins\.(txt|ya?ml)$ for manager jenkins
DEBUG: Using file match: (^|/)jsonnetfile.json$ for manager jsonnet-bundler
DEBUG: Using file match: (^|/)kustomization\.yaml for manager kustomize
DEBUG: Using file match: (^|/)project\.clj$ for manager leiningen
DEBUG: Using file match: \.pom\.xml$ for manager maven
DEBUG: Using file match: (^|/)pom\.xml$ for manager maven
DEBUG: Using file match: (^|/)package.js$ for manager meteor
DEBUG: Using file match: (^|/)mix\.exs$ for manager mix
DEBUG: Using file match: (^|/).node-version$ for manager nodenv
DEBUG: Using file match: (^|/)package.json$ for manager npm
DEBUG: Using file match: \.(?:cs|fs|vb)proj$ for manager nuget
DEBUG: Using file match: \.(?:props|targets)$ for manager nuget
DEBUG: Using file match: (^|\/)dotnet-tools\.json$ for manager nuget
DEBUG: Using file match: (^|\/)global\.json$ for manager nuget
DEBUG: Using file match: (^|/)\.nvmrc$ for manager nvm
DEBUG: Using file match: (^|/)([\w-]*)requirements\.(txt|pip)$ for manager pip_requirements
DEBUG: Using file match: (^|/)setup.py$ for manager pip_setup
DEBUG: Using file match: (^|/)Pipfile$ for manager pipenv
DEBUG: Using file match: (^|/)pyproject\.toml$ for manager poetry
DEBUG: Using file match: (^|/)\.pre-commit-config\.yaml$ for manager pre-commit
DEBUG: Using file match: (^|/)pubspec\.ya?ml$ for manager pub
DEBUG: Using file match: (^|/).python-version$ for manager pyenv
DEBUG: Using file match: (^|/)\.ruby-version$ for manager ruby-version
DEBUG: Using file match: \.sbt$ for manager sbt
DEBUG: Using file match: project/[^/]*.scala$ for manager sbt
DEBUG: Using file match: (^|/)setup\.cfg$ for manager setup-cfg
DEBUG: Using file match: (^|/)Package\.swift for manager swift
DEBUG: Using file match: \.tf$ for manager terraform
DEBUG: Using file match: (^|/)\.terraform-version$ for manager terraform-version
DEBUG: Using file match: (^|/)terragrunt\.hcl$ for manager terragrunt
DEBUG: Using file match: (^|/)\.terragrunt-version$ for manager terragrunt-version
DEBUG: Using file match: ^.travis.yml$ for manager travis
DEBUG: Matched 1 file(s) for manager github-actions: .github/workflows/go.yml
DEBUG: Matched 2 file(s) for manager gomod: a/go.mod, b/go.mod
DEBUG: No multi-line match: go.uber.org/atomic v1.6.0 // indirect
DEBUG: No multi-line match: go.uber.org/multierr v1.5.0 // indirect
DEBUG: No multi-line match: go.uber.org/atomic v1.6.0 // indirect
DEBUG: No multi-line match: go.uber.org/multierr v1.5.0 // indirect
DEBUG: No multi-line match: go.uber.org/zap v1.16.0 // indirect
DEBUG: Found github-actions package files
DEBUG: Found gomod package files
DEBUG: Found 3 package file(s)
INFO: Dependency extraction complete
{
  "baseBranch": "main",
  "stats": {
    "managers": {
      "github-actions": {
        "fileCount": 1,
        "depCount": 2
      },
      "gomod": {
        "fileCount": 2,
        "depCount": 2
      }
    },
    "total": {
      "fileCount": 3,
      "depCount": 4
    }
  }
}
DEBUG: Goproxy error: trying next URL provided with GOPROXY
{
  "err": {
    "name": "HTTPError",
    "code": "ERR_NON_2XX_3XX_RESPONSE",
    "timings": {
      "start": 1638910494479,
      "socket": 1638910494512,
      "lookup": 1638910494512,
      "connect": 1638910494523,
      "secureConnect": 1638910494542,
      "upload": 1638910494542,
      "response": 1638910494566,
      "end": 1638910494567,
      "phases": {
        "wait": 33,
        "dns": 0,
        "tcp": 11,
        "tls": 19,
        "request": 0,
        "firstByte": 24,
        "download": 1,
        "total": 88
      }
    },
    "message": "Response code 410 (Gone)",
    "stack": "HTTPError: Response code 410 (Gone)\n    at Request.<anonymous> (/home/ubuntu/renovateapp/node_modules/got/dist/source/as-promise/index.js:117:42)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)",
    "options": {
      "headers": {
        "user-agent": "Renovate Bot (GitHub App 2740)",
        "accept-encoding": "gzip, deflate, br"
      },
      "url": "https://proxy.golang.org/github.com/eriksw/renovate-peer-go-mod-indirect/a/@v/list",
      "hostType": "go",
      "username": "",
      "password": "",
      "method": "GET",
      "http2": false
    },
    "response": {
      "statusCode": 410,
      "statusMessage": "Gone",
      "body": "not found: module github.com/eriksw/renovate-peer-go-mod-indirect/a: git ls-remote -q origin in /tmp/gopath/pkg/mod/cache/vcs/c91760e9dcba81fb66c7001ea31c860bab6182581792a0d1aa9ffd8b350085b5: exit status 128:\n\tfatal: could not read Username for 'https://github.com': terminal prompts disabled\nConfirm the import path was entered correctly.\nIf this is a private repository, see https://golang.org/doc/faq#git_https for additional information.",
      "headers": {
        "access-control-allow-origin": "*",
        "cache-control": "public, max-age=60",
        "content-type": "text/plain; charset=UTF-8",
        "date": "Tue, 07 Dec 2021 20:54:54 GMT",
        "expires": "Tue, 07 Dec 2021 20:55:54 GMT",
        "x-content-type-options": "nosniff",
        "x-frame-options": "SAMEORIGIN",
        "x-xss-protection": "0",
        "content-length": "441",
        "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"",
        "connection": "close"
      },
      "httpVersion": "1.1"
    }
  }
}
DEBUG: Found no results from datasource that look like a version (github.com/eriksw/renovate-peer-go-mod-indirect/a)(dependency="github.com/eriksw/renovate-peer-go-mod-indirect/a")
{
  "result": {
    "sourceUrl": "https://github.com/eriksw/renovate-peer-go-mod-indirect",
    "releases": []
  }
}
DEBUG: GitHub 404
{
  "url": "https://api.github.com/repos/eriksw/renovate-peer-go-mod-indirect/git/refs/tags/v0.0.0-00010101000000-000000000000"
}
DEBUG: Error getting tag commit from GitHub repo
{
  "githubRepo": "eriksw/renovate-peer-go-mod-indirect",
  "err": {
    "name": "HTTPError",
    "code": "ERR_NON_2XX_3XX_RESPONSE",
    "timings": {
      "start": 1638910495000,
      "socket": 1638910495000,
      "lookup": 1638910495000,
      "connect": 1638910495010,
      "secureConnect": 1638910495021,
      "upload": 1638910495021,
      "response": 1638910495176,
      "end": 1638910495177,
      "phases": {
        "wait": 0,
        "dns": 0,
        "tcp": 10,
        "tls": 11,
        "request": 0,
        "firstByte": 155,
        "download": 1,
        "total": 177
      }
    },
    "message": "Response code 404 (Not Found)",
    "stack": "HTTPError: Response code 404 (Not Found)\n    at Request.<anonymous> (/home/ubuntu/renovateapp/node_modules/got/dist/source/as-promise/index.js:117:42)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)",
    "options": {
      "headers": {
        "user-agent": "Renovate Bot (GitHub App 2740)",
        "accept": "application/vnd.github.machine-man-preview+json",
        "authorization": "***********",
        "accept-encoding": "gzip, deflate, br"
      },
      "url": "https://api.github.com/repos/eriksw/renovate-peer-go-mod-indirect/git/refs/tags/v0.0.0-00010101000000-000000000000",
      "hostType": "github-tags",
      "username": "",
      "password": "",
      "method": "GET",
      "http2": false
    },
    "response": {
      "statusCode": 404,
      "statusMessage": "Not Found",
      "body": {
        "message": "Not Found",
        "documentation_url": "https://docs.github.com/rest"
      },
      "headers": {
        "server": "GitHub.com",
        "date": "Tue, 07 Dec 2021 20:54:55 GMT",
        "content-type": "application/json; charset=utf-8",
        "transfer-encoding": "chunked",
        "x-poll-interval": "300",
        "x-github-media-type": "github.v3; param=machine-man-preview; format=json",
        "x-ratelimit-limit": "5000",
        "x-ratelimit-remaining": "4995",
        "x-ratelimit-reset": "1638910672",
        "x-ratelimit-used": "5",
        "x-ratelimit-resource": "core",
        "access-control-expose-headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset",
        "access-control-allow-origin": "*",
        "strict-transport-security": "max-age=31536000; includeSubdomains; preload",
        "x-frame-options": "deny",
        "x-content-type-options": "nosniff",
        "x-xss-protection": "0",
        "referrer-policy": "origin-when-cross-origin, strict-origin-when-cross-origin",
        "content-security-policy": "default-src 'none'",
        "vary": "Accept-Encoding, Accept, X-Requested-With",
        "content-encoding": "gzip",
        "x-github-request-id": "9608:73D6:1192E85:122D322:61AFCA1F",
        "connection": "close"
      },
      "httpVersion": "1.1"
    }
  }
}
DEBUG: Package releases lookups complete
{
  "baseBranch": "main"
}
DEBUG: branchifyUpgrades
DEBUG: 1 flattened updates found: go.uber.org/zap
DEBUG: Returning 1 branch(es)
DEBUG: Fetching changelog: https://github.com/uber-go/zap (v1.16.0 -> v1.19.1)
DEBUG: config.repoIsOnboarded=true
DEBUG: packageFiles with updates
{
  "config": {
    "github-actions": [
      {
        "packageFile": ".github/workflows/go.yml",
        "deps": [
          {
            "depName": "actions/checkout",
            "commitMessageTopic": "{{{depName}}} action",
            "datasource": "github-tags",
            "versioning": "docker",
            "depType": "action",
            "replaceString": "actions/checkout@v2",
            "autoReplaceStringTemplate": "{{depName}}@{{#if newDigest}}{{newDigest}}{{#if newValue}} # renovate: tag={{newValue}}{{/if}}{{/if}}{{#unless newDigest}}{{newValue}}{{/unless}}",
            "currentValue": "v2",
            "depIndex": 0,
            "updates": [],
            "warnings": [],
            "sourceUrl": "https://github.com/actions/checkout",
            "currentVersion": "v2",
            "fixedVersion": "v2"
          },
          {
            "depName": "actions/setup-go",
            "commitMessageTopic": "{{{depName}}} action",
            "datasource": "github-tags",
            "versioning": "docker",
            "depType": "action",
            "replaceString": "actions/setup-go@v2",
            "autoReplaceStringTemplate": "{{depName}}@{{#if newDigest}}{{newDigest}}{{#if newValue}} # renovate: tag={{newValue}}{{/if}}{{/if}}{{#unless newDigest}}{{newValue}}{{/unless}}",
            "currentValue": "v2",
            "depIndex": 1,
            "updates": [],
            "warnings": [],
            "sourceUrl": "https://github.com/actions/setup-go",
            "currentVersion": "v2",
            "fixedVersion": "v2"
          }
        ]
      }
    ],
    "gomod": [
      {
        "packageFile": "a/go.mod",
        "constraints": {
          "go": "^1.17"
        },
        "deps": [
          {
            "managerData": {
              "lineNumber": 4
            },
            "depName": "go.uber.org/zap",
            "depType": "require",
            "currentValue": "v1.16.0",
            "datasource": "go",
            "depIndex": 0,
            "updates": [
              {
                "bucket": "non-major",
                "newVersion": "v1.19.1",
                "newValue": "v1.19.1",
                "releaseTimestamp": "2021-09-08T21:32:28.000Z",
                "newMajor": 1,
                "newMinor": 19,
                "updateType": "minor",
                "branchName": "renovate/go.uber.org-zap-1.x"
              }
            ],
            "warnings": [],
            "versioning": "semver",
            "sourceUrl": "https://github.com/uber-go/zap",
            "currentVersion": "v1.16.0",
            "isSingleVersion": true,
            "fixedVersion": "v1.16.0"
          }
        ]
      },
      {
        "packageFile": "b/go.mod",
        "constraints": {
          "go": "^1.17"
        },
        "deps": [
          {
            "managerData": {
              "lineNumber": 4
            },
            "depName": "github.com/eriksw/renovate-peer-go-mod-indirect/a",
            "depType": "require",
            "currentValue": "v0.0.0-00010101000000-000000000000",
            "datasource": "go",
            "currentDigest": "000000000000",
            "digestOneAndOnly": true,
            "depIndex": 0,
            "updates": [],
            "warnings": [],
            "versioning": "semver",
            "sourceUrl": "https://github.com/eriksw/renovate-peer-go-mod-indirect",
            "currentVersion": "v0.0.0-00010101000000-000000000000",
            "fixedVersion": "v0.0.0-00010101000000-000000000000"
          }
        ]
      }
    ]
  }
}
DEBUG: processRepo()
DEBUG: Processing 1 branch: renovate/go.uber.org-zap-1.x
DEBUG: Calculating hourly PRs remaining
DEBUG: Retrieving PR list
DEBUG: Retrieved 0 Pull Requests
DEBUG: currentHourStart=2021-12-07T20:00:00.000+00:00
DEBUG: PR hourly limit remaining: 2
DEBUG: Calculating prConcurrentLimit (5)
DEBUG: getBranchPr(renovate/go.uber.org-zap-1.x)
DEBUG: findPr(renovate/go.uber.org-zap-1.x, undefined, open)
DEBUG: findPr(renovate/go.uber.org-zap-1.x, undefined, closed)
DEBUG: 0 PRs are currently open
DEBUG: PR concurrent limit remaining: 5
DEBUG: Calculated maximum PRs remaining this run
{
  "prsRemaining": 2
}
DEBUG: PullRequests limit = 2
DEBUG: Calculating hourly PRs remaining
DEBUG: currentHourStart=2021-12-07T20:00:00.000+00:00
DEBUG: PR hourly limit remaining: 2
DEBUG: Calculating branchConcurrentLimit (5)
DEBUG: 0 already existing branches found:
DEBUG: Branch concurrent limit remaining: 5
DEBUG: Calculated maximum branches remaining this run
{
  "branchesRemaining": 2
}
DEBUG: Branches limit = 2
DEBUG: Setting current branch to main(branch="renovate/go.uber.org-zap-1.x")
DEBUG: latest commit(branch="renovate/go.uber.org-zap-1.x")
{
  "branchName": "main",
  "latestCommitDate": "2021-12-07T12:53:59-08:00"
}
DEBUG: getBranchPr(renovate/go.uber.org-zap-1.x)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: findPr(renovate/go.uber.org-zap-1.x, undefined, open)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: findPr(renovate/go.uber.org-zap-1.x, undefined, closed)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: branchExists=false(branch="renovate/go.uber.org-zap-1.x")
DEBUG: dependencyDashboardCheck=undefined(branch="renovate/go.uber.org-zap-1.x")
DEBUG: recreateClosed is false(branch="renovate/go.uber.org-zap-1.x")
DEBUG: findPr(renovate/go.uber.org-zap-1.x, Update module go.uber.org/zap to v1.19.1, !open)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: prAlreadyExisted=false(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Checking schedule(at any time, null)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: No schedule defined(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Branch needs creating(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Using reuseExistingBranch: false(branch="renovate/go.uber.org-zap-1.x")
DEBUG: manager.getUpdatedPackageFiles() reuseExistinbranch=false(branch="renovate/go.uber.org-zap-1.x")
DEBUG: gomod.updateDependency: v1.19.1(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Updating go.uber.org/zap in a/go.mod(branch="renovate/go.uber.org-zap-1.x")
DEBUG: gomod.updateArtifacts(a/go.mod)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Adding Git authentication for Go Module retrieval for https://api.github.com/ using token auth.(branch="renovate/go.uber.org-zap-1.x")
DEBUG: go get command included(branch="renovate/go.uber.org-zap-1.x")
{
  "cmd": "go",
  "args": "get -d ./..."
}
DEBUG: go mod tidy command included(branch="renovate/go.uber.org-zap-1.x")
{
  "cmd": "go",
  "args": "mod tidy"
}
DEBUG: additional go mod tidy command included(branch="renovate/go.uber.org-zap-1.x")
{
  "cmd": "go",
  "args": "mod tidy"
}
DEBUG: Using docker to execute(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Found version constraint - checking for a compatible image to use(branch="renovate/go.uber.org-zap-1.x")
{
  "depName": "docker.io/renovate/go",
  "scheme": "npm",
  "constraint": "^1.17"
}
DEBUG: getLabels(https://index.docker.io, renovate/go, latest)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Found compatible image version(branch="renovate/go.uber.org-zap-1.x")
{
  "depName": "docker.io/renovate/go",
  "scheme": "npm",
  "constraint": "^1.17",
  "version": "1.17.4"
}
DEBUG: Resolved tag constraint(branch="renovate/go.uber.org-zap-1.x")
{
  "image": "docker.io/renovate/go",
  "tagConstraint": "^1.17",
  "tagVersioning": "npm",
  "tag": "1.17.4"
}
DEBUG: Fetching Docker image: docker.io/renovate/go:1.17.4(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Finished fetching Docker image(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Executing command(branch="renovate/go.uber.org-zap-1.x")
{
  "command": [
    "docker run --rm --name=renovate_go --label=renovate_child -v \"/mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect\":\"/mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect\" -v \"/tmp/renovate-cache\":\"/tmp/renovate-cache\" -e GOPATH -e GOPROXY -e GOFLAGS -e CGO_ENABLED -e GIT_CONFIG_KEY_0 -e GIT_CONFIG_VALUE_0 -e GIT_CONFIG_COUNT -e GIT_CONFIG_KEY_1 -e GIT_CONFIG_VALUE_1 -w \"/mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect/a\" docker.io/renovate/go:1.17.4 bash -l -c \"go get -d ./... && go mod tidy && go mod tidy\""
  ]
}
DEBUG: exec completed(branch="renovate/go.uber.org-zap-1.x")
{
  "cmd": "docker run --rm --name=renovate_go --label=renovate_child -v \"/mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect\":\"/mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect\" -v \"/tmp/renovate-cache\":\"/tmp/renovate-cache\" -e GOPATH -e GOPROXY -e GOFLAGS -e CGO_ENABLED -e GIT_CONFIG_KEY_0 -e GIT_CONFIG_VALUE_0 -e GIT_CONFIG_COUNT -e GIT_CONFIG_KEY_1 -e GIT_CONFIG_VALUE_1 -w \"/mnt/renovate/gh/eriksw/renovate-peer-go-mod-indirect/a\" docker.io/renovate/go:1.17.4 bash -l -c \"go get -d ./... && go mod tidy && go mod tidy\"",
  "durationMs": 7327,
  "stdout": "",
  "stderr": "go: downloading go.uber.org/zap v1.19.1\ngo: downloading go.uber.org/atomic v1.7.0\ngo: downloading go.uber.org/multierr v1.6.0\ngo get: upgraded go.uber.org/atomic v1.6.0 => v1.7.0\ngo get: upgraded go.uber.org/multierr v1.5.0 => v1.6.0\ngo: downloading github.com/pkg/errors v0.8.1\ngo: downloading github.com/stretchr/testify v1.7.0\ngo: downloading go.uber.org/goleak v1.1.11-0.20210813005559-691160354723\ngo: downloading github.com/benbjohnson/clock v1.1.0\ngo: downloading gopkg.in/yaml.v2 v2.2.8\ngo: downloading github.com/davecgh/go-spew v1.1.1\ngo: downloading github.com/pmezard/go-difflib v1.0.0\ngo: downloading gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b\n"
}
DEBUG: Returning updated go.sum(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Found updated go.mod after go.sum update(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Updated 1 package files(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Updated 2 lock files(branch="renovate/go.uber.org-zap-1.x")
{
  "updatedArtifacts": [
    "a/go.sum",
    "a/go.mod"
  ]
}
DEBUG: 2 file(s) to commit(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Committing files to branch renovate/go.uber.org-zap-1.x(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Setting git author name(branch="renovate/go.uber.org-zap-1.x")
{
  "gitAuthorName": "Renovate Bot"
}
DEBUG: Setting git author email(branch="renovate/go.uber.org-zap-1.x")
{
  "gitAuthorEmail": "bot@renovateapp.com"
}
DEBUG: git commit(branch="renovate/go.uber.org-zap-1.x")
{
  "deletedFiles": [],
  "ignoredFiles": [],
  "result": {
    "author": null,
    "branch": "renovate/go.uber.org-zap-1.x",
    "commit": "8654953",
    "root": false,
    "summary": {
      "changes": 2,
      "insertions": 35,
      "deletions": 0
    }
  }
}
DEBUG: git push(branch="renovate/go.uber.org-zap-1.x")
{
  "result": {
    "pushed": [
      {
        "deleted": false,
        "tag": false,
        "branch": true,
        "new": true,
        "alreadyUpdated": false,
        "local": "refs/heads/renovate/go.uber.org-zap-1.x",
        "remote": "refs/heads/renovate/go.uber.org-zap-1.x"
      }
    ],
    "branch": {
      "local": "renovate/go.uber.org-zap-1.x",
      "remote": "renovate/go.uber.org-zap-1.x",
      "remoteName": "origin"
    },
    "ref": {
      "local": "refs/remotes/origin/renovate/go.uber.org-zap-1.x"
    },
    "remoteMessages": {
      "all": [
        "Create a pull request for 'renovate/go.uber.org-zap-1.x' on GitHub by visiting:",
        "https://github.com/eriksw/renovate-peer-go-mod-indirect/pull/new/renovate/go.uber.org-zap-1.x"
      ],
      "pullRequestUrl": "https://github.com/eriksw/renovate-peer-go-mod-indirect/pull/new/renovate/go.uber.org-zap-1.x"
    }
  }
}
INFO: Branch created(branch="renovate/go.uber.org-zap-1.x")
{
  "commitSha": "8654953"
}
DEBUG: Ensuring PR(branch="renovate/go.uber.org-zap-1.x")
DEBUG: There are 0 errors and 0 warnings(branch="renovate/go.uber.org-zap-1.x")
DEBUG: getBranchPr(renovate/go.uber.org-zap-1.x)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: findPr(renovate/go.uber.org-zap-1.x, undefined, open)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: findPr(renovate/go.uber.org-zap-1.x, undefined, closed)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Creating PR(branch="renovate/go.uber.org-zap-1.x")
{
  "prTitle": "Update module go.uber.org/zap to v1.19.1"
}
DEBUG: Creating PR(branch="renovate/go.uber.org-zap-1.x")
{
  "title": "Update module go.uber.org/zap to v1.19.1",
  "head": "eriksw:renovate/go.uber.org-zap-1.x",
  "base": "main",
  "draft": false
}
DEBUG: PR created(branch="renovate/go.uber.org-zap-1.x")
{
  "pr": 1,
  "draft": false
}
DEBUG: Adding labels '' to #1(branch="renovate/go.uber.org-zap-1.x")
INFO: PR created(branch="renovate/go.uber.org-zap-1.x")
{
  "pr": 1,
  "prTitle": "Update module go.uber.org/zap to v1.19.1"
}
DEBUG: addAssigneesReviewers(pr=1)(branch="renovate/go.uber.org-zap-1.x")
DEBUG: Created Pull Request #1(branch="renovate/go.uber.org-zap-1.x")
DEBUG: PR is not configured for automerge(branch="renovate/go.uber.org-zap-1.x")
DEBUG: getBranchPr(renovate/go.uber.org-zap-1.x)
DEBUG: findPr(renovate/go.uber.org-zap-1.x, undefined, open)
DEBUG: Found PR #1
DEBUG: Returning from graphql open PR list
DEBUG: Ensuring Dependency Dashboard
DEBUG: ensureIssue(Dependency Dashboard)
INFO: Issue created
DEBUG: Removing any stale branches
DEBUG: config.repoIsOnboarded=true
DEBUG: Branch lists
{
  "branchList": [
    "renovate/go.uber.org-zap-1.x"
  ],
  "renovateBranches": [
    "renovate/go.uber.org-zap-1.x"
  ]
}
DEBUG: remainingBranches=
DEBUG: No branches to clean up
DEBUG: Retrieving issueList
DEBUG: Retrieved 1 issues
DEBUG: Repository timing splits (milliseconds)
{
  "splits": {
    "init": 3531,
    "extract": 918,
    "lookup": 902,
    "update": 12877
  },
  "total": 19493
}
DEBUG: http statistics
{
  "urls": {
    "https://api.github.com/graphql (POST)": 5,
    "https://api.github.com/repos/eriksw/renovate-peer-go-mod-indirect/issues (POST)": 1,
    "https://api.github.com/repos/eriksw/renovate-peer-go-mod-indirect/pulls (GET)": 1,
    "https://api.github.com/repos/eriksw/renovate-peer-go-mod-indirect/pulls (POST)": 1,
    "https://api.github.com/repos/eriksw/renovate-peer-go-mod-indirect/releases (GET)": 1,
    "https://api.github.com/repos/eriksw/renovate-peer-go-mod-indirect/tags (GET)": 1,
    "https://api.github.com/repos/whitesource/merge-confidence/contents/beta.json (GET)": 1
  },
  "hostStats": {
    "api.github.com": {
      "requestCount": 11,
      "requestAvgMs": 343,
      "queueAvgMs": 0
    }
  },
  "totalRequests": 11
}
INFO: Repository finished
{
  "durationMs": 19493
}

If you have any ideas on how this should be implemented, please tell us here.

Renovate needs to be aware of relative path replace directives amongst go modules and ensure update/tidy actions propagate following those relationships.

Is this a feature you are interested in implementing yourself?

No

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedHelp is needed or welcomed on this issuemanager:gomodGo Modulespriority-3-mediumDefault priority, "should be done" but isn't prioritised ahead of others

    Priority

    None yet

    Datasource

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions