|
| 1 | +# |
| 2 | +# Licensed to the Apache Software Foundation (ASF) under one or more |
| 3 | +# contributor license agreements. See the NOTICE file distributed with |
| 4 | +# this work for additional information regarding copyright ownership. |
| 5 | +# The ASF licenses this file to You under the Apache License, Version 2.0 |
| 6 | +# (the "License"); you may not use this file except in compliance with |
| 7 | +# the License. You may obtain a copy of the License at |
| 8 | +# |
| 9 | +# http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | +# |
| 11 | +# Unless required by applicable law or agreed to in writing, software |
| 12 | +# distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | +# See the License for the specific language governing permissions and |
| 15 | +# limitations under the License. |
| 16 | +# |
| 17 | + |
| 18 | +# Dependabot version updates. |
| 19 | +# |
| 20 | +# Conventions used throughout this file: |
| 21 | +# * `commit-message.prefix: build(deps)` matches the commit convention that |
| 22 | +# `.github/workflows/commit-msg.yml` enforces on every pull request. |
| 23 | +# * Minor and patch updates are grouped into a single pull request per |
| 24 | +# ecosystem; majors stay separate so they remain individually reviewable. |
| 25 | +# * `ignore` entries document deliberately deferred upgrades. Each one names |
| 26 | +# the reason, so the rule can be removed once the reason disappears. |
| 27 | +# |
| 28 | +# Known coverage gaps (intentionally not automated): |
| 29 | +# * Compose files use their own `docker-compose` ecosystem. Its filename |
| 30 | +# matcher does not accept the two multi-suffix names |
| 31 | +# `docker-compose-dev-mysql.yml` and `docker-compose-dev-postgresql.yml`, |
| 32 | +# so the images in those files stay on manual maintenance. |
| 33 | +# * Workflow `container:` and `services:` images are not covered either: the |
| 34 | +# `github-actions` ecosystem only updates `uses:` references. |
| 35 | +# * `backend/scripts/install-mockery.sh` pins a tool version in a shell |
| 36 | +# script and is not a supported manifest format. |
| 37 | +version: 2 |
| 38 | +updates: |
| 39 | + # ---------------------------------------------------------------- Go ----- |
| 40 | + - package-ecosystem: gomod |
| 41 | + directory: /backend |
| 42 | + schedule: |
| 43 | + interval: weekly |
| 44 | + day: monday |
| 45 | + time: "06:00" |
| 46 | + timezone: Etc/UTC |
| 47 | + open-pull-requests-limit: 5 |
| 48 | + commit-message: |
| 49 | + prefix: build(deps) |
| 50 | + groups: |
| 51 | + go-minor-patch: |
| 52 | + patterns: |
| 53 | + - "*" |
| 54 | + update-types: |
| 55 | + - minor |
| 56 | + - patch |
| 57 | + ignore: |
| 58 | + # The Go toolchain directive is coupled to the CI bootstrap version and |
| 59 | + # to the golang base images; it is raised deliberately, never by a bot. |
| 60 | + - dependency-name: go |
| 61 | + # git2go is ABI-coupled to the libgit2 version installed in the builder |
| 62 | + # image. A mismatch fails at link time, so this is always manual. |
| 63 | + - dependency-name: github.com/libgit2/git2go/* |
| 64 | + # swag v2 is still a release candidate and requires regenerating every |
| 65 | + # swagger annotation. Tracked as an externally gated upgrade. |
| 66 | + - dependency-name: github.com/swaggo/swag |
| 67 | + update-types: |
| 68 | + - version-update:semver-major |
| 69 | + |
| 70 | + # -------------------------------------------------------------- npm ------ |
| 71 | + - package-ecosystem: npm |
| 72 | + directory: /config-ui |
| 73 | + schedule: |
| 74 | + interval: weekly |
| 75 | + day: monday |
| 76 | + time: "06:00" |
| 77 | + timezone: Etc/UTC |
| 78 | + open-pull-requests-limit: 5 |
| 79 | + commit-message: |
| 80 | + prefix: build(deps) |
| 81 | + groups: |
| 82 | + js-minor-patch: |
| 83 | + patterns: |
| 84 | + - "*" |
| 85 | + update-types: |
| 86 | + - minor |
| 87 | + - patch |
| 88 | + ignore: |
| 89 | + # TypeScript 7 is the native-port compiler. Upgrading requires validating |
| 90 | + # the whole build chain (vite, eslint, type definitions) in one go. |
| 91 | + - dependency-name: typescript |
| 92 | + update-types: |
| 93 | + - version-update:semver-major |
| 94 | + |
| 95 | + - package-ecosystem: npm |
| 96 | + directory: /e2e |
| 97 | + schedule: |
| 98 | + interval: weekly |
| 99 | + day: monday |
| 100 | + time: "06:00" |
| 101 | + timezone: Etc/UTC |
| 102 | + open-pull-requests-limit: 5 |
| 103 | + commit-message: |
| 104 | + prefix: build(deps) |
| 105 | + # This directory has no lockfile. Without `increase`, Dependabot would stay |
| 106 | + # silent as long as a new release still satisfies the declared caret range. |
| 107 | + versioning-strategy: increase |
| 108 | + groups: |
| 109 | + e2e-minor-patch: |
| 110 | + patterns: |
| 111 | + - "*" |
| 112 | + update-types: |
| 113 | + - minor |
| 114 | + - patch |
| 115 | + |
| 116 | + # ------------------------------------------------------------- Python ---- |
| 117 | + - package-ecosystem: pip |
| 118 | + directories: |
| 119 | + - /backend/python |
| 120 | + - /backend/python/pydevlake |
| 121 | + - /backend/python/plugins/azuredevops |
| 122 | + - /backend/python/test/fakeplugin |
| 123 | + - /grafana/scripts |
| 124 | + schedule: |
| 125 | + interval: weekly |
| 126 | + day: monday |
| 127 | + time: "06:00" |
| 128 | + timezone: Etc/UTC |
| 129 | + open-pull-requests-limit: 5 |
| 130 | + commit-message: |
| 131 | + prefix: build(deps) |
| 132 | + groups: |
| 133 | + python-minor-patch: |
| 134 | + patterns: |
| 135 | + - "*" |
| 136 | + update-types: |
| 137 | + - minor |
| 138 | + - patch |
| 139 | + ignore: |
| 140 | + # pydevlake is written against Pydantic 1 and SQLModel 0.0.8. SQLModel is |
| 141 | + # still pre-1.0, so SemVer treats even 0.0.8 -> 0.0.30 as a patch, yet that |
| 142 | + # release pulls in SQLAlchemy 2 and Pydantic 2 and breaks |
| 143 | + # `pydevlake/model.py` with "Passing primary_key is not supported when also |
| 144 | + # passing a sa_column". Verified on a fork: the bump landed in the group |
| 145 | + # and turned unit-test and test-e2e red. |
| 146 | + # Drop both entries once pydevlake has been migrated to Pydantic 2. |
| 147 | + - dependency-name: sqlmodel |
| 148 | + - dependency-name: pydantic |
| 149 | + update-types: |
| 150 | + - version-update:semver-major |
| 151 | + |
| 152 | + # ------------------------------------------------------------- Docker ---- |
| 153 | + # |
| 154 | + # This block covers both Dockerfiles and Kubernetes manifests: the `docker` |
| 155 | + # file fetcher also picks up YAML files that carry `apiVersion` and `kind`, |
| 156 | + # which is why `/devops/deployment/k8s` is listed here. Only the `mysql` |
| 157 | + # image there is pinned to a version; the `apache/devlake*` images use |
| 158 | + # `latest` and are left untouched. |
| 159 | + # |
| 160 | + # Note on Docker tag semantics: language base images encode their version in |
| 161 | + # the tag, so `node:24 -> node:25` is a major update while |
| 162 | + # `python:3.11 -> python:3.14` would count as a minor one. All three images |
| 163 | + # define a runtime rather than a dependency: the Python tag has to match what |
| 164 | + # the Poetry lockfiles resolve against, and the Go tag has to match the `go` |
| 165 | + # directive in backend/go.mod and the toolchain used by CI. They are raised |
| 166 | + # deliberately, so they are ignored here. |
| 167 | + - package-ecosystem: docker |
| 168 | + directories: |
| 169 | + - /backend |
| 170 | + - /config-ui |
| 171 | + - /grafana |
| 172 | + - /devops/docker/lake-builder |
| 173 | + - /.devcontainer |
| 174 | + - /devops/deployment/k8s |
| 175 | + schedule: |
| 176 | + interval: weekly |
| 177 | + day: monday |
| 178 | + time: "06:00" |
| 179 | + timezone: Etc/UTC |
| 180 | + open-pull-requests-limit: 5 |
| 181 | + commit-message: |
| 182 | + prefix: build(deps) |
| 183 | + groups: |
| 184 | + docker-patch: |
| 185 | + patterns: |
| 186 | + - "*" |
| 187 | + update-types: |
| 188 | + - patch |
| 189 | + ignore: |
| 190 | + # The build image tracks the active LTS line. Node 26 is not an LTS |
| 191 | + # release, and a trial run confirmed that without this rule Dependabot |
| 192 | + # proposes moving from 24 to 25. |
| 193 | + - dependency-name: node |
| 194 | + update-types: |
| 195 | + - version-update:semver-major |
| 196 | + # Ignored for minor as well, because a jump such as 3.11 -> 3.14 is a |
| 197 | + # minor update in tag terms while being a runtime change in practice. |
| 198 | + - dependency-name: python |
| 199 | + update-types: |
| 200 | + - version-update:semver-major |
| 201 | + - version-update:semver-minor |
| 202 | + - dependency-name: golang |
| 203 | + update-types: |
| 204 | + - version-update:semver-major |
| 205 | + - version-update:semver-minor |
| 206 | + # Dependabot strips the registry host from the dependency name, so this |
| 207 | + # must be "devcontainers/go" and not "mcr.microsoft.com/devcontainers/go". |
| 208 | + - dependency-name: devcontainers/go |
| 209 | + update-types: |
| 210 | + - version-update:semver-major |
| 211 | + - version-update:semver-minor |
| 212 | + |
| 213 | + # ----------------------------------------------------- Docker Compose --- |
| 214 | + # |
| 215 | + # The separate Compose updater recognises four of the six non-release |
| 216 | + # Compose files. The two docker-compose-dev-*.yml names are not matched by |
| 217 | + # its current filename regexp and therefore remain a documented manual gap. |
| 218 | + # Jira, Jenkins and Bitbucket are compatibility fixtures rather than runtime |
| 219 | + # dependencies; their deliberately old versions must not be raised blindly. |
| 220 | + - package-ecosystem: docker-compose |
| 221 | + directories: |
| 222 | + - / |
| 223 | + - /.devcontainer |
| 224 | + - /devops/deployment/temporal |
| 225 | + - /backend/test/e2e/remote |
| 226 | + schedule: |
| 227 | + interval: weekly |
| 228 | + day: monday |
| 229 | + time: "06:00" |
| 230 | + timezone: Etc/UTC |
| 231 | + open-pull-requests-limit: 5 |
| 232 | + commit-message: |
| 233 | + prefix: build(deps) |
| 234 | + groups: |
| 235 | + compose-minor-patch: |
| 236 | + patterns: |
| 237 | + - "*" |
| 238 | + update-types: |
| 239 | + - minor |
| 240 | + - patch |
| 241 | + ignore: |
| 242 | + - dependency-name: jenkins/jenkins |
| 243 | + - dependency-name: atlassian/jira-software |
| 244 | + - dependency-name: atlassian/bitbucket-server |
| 245 | + |
| 246 | + # ------------------------------------------------------ GitHub Actions --- |
| 247 | + # |
| 248 | + # Most workflows reference actions by tag, while the docker/* actions are |
| 249 | + # pinned to a commit SHA with a `# vX.Y.Z` comment. Dependabot updates a |
| 250 | + # SHA pin to the new SHA and rewrites that comment, so pinning is preserved. |
| 251 | + # |
| 252 | + # Dependabot never proposes a change of action *namespace*. Migrating to a |
| 253 | + # differently owned action stays a manual step because ASF infrastructure |
| 254 | + # maintains an allow-list of permitted actions. |
| 255 | + - package-ecosystem: github-actions |
| 256 | + directory: / |
| 257 | + schedule: |
| 258 | + interval: weekly |
| 259 | + day: monday |
| 260 | + time: "06:00" |
| 261 | + timezone: Etc/UTC |
| 262 | + open-pull-requests-limit: 5 |
| 263 | + commit-message: |
| 264 | + prefix: build(deps) |
| 265 | + groups: |
| 266 | + actions-minor-patch: |
| 267 | + patterns: |
| 268 | + - "*" |
| 269 | + update-types: |
| 270 | + - minor |
| 271 | + - patch |
| 272 | + |
0 commit comments