Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
4ac18b2
chore: upgrade deps/tooling and fix React 19 + MySQL migration regres…
DoDiODev Jun 24, 2026
a082027
chore: upgrade deps/tooling and fix React 19 + MySQL migration regres…
DoDiODev Jun 24, 2026
2ca0340
Cleanup accidently commited files
DoDiODev Jun 25, 2026
6b7c832
Cleanup Dockerfiles
DoDiODev Jun 25, 2026
5f437b4
Merge branch 'apache:main' into versionUpgrade
DoDiODev Jun 25, 2026
e5f13d9
build: pin MySQL dev images and align swag CLI version (Dependency Up…
DoDiODev Jun 25, 2026
57773dd
ignore not necessary files for Dockerimage
DoDiODev Jun 25, 2026
6451529
build(deps): dependency updates (grafana 12.4.5, nginx 1.31.2)
DoDiODev Jun 25, 2026
b346b16
chore(python): bump runtime 3.9 → 3.11 + refresh devcontainer
DoDiODev Jun 25, 2026
344303d
fix(grafana): make Grafana 12 dashboards load (home + provisioning)
DoDiODev Jun 25, 2026
adb99f3
fix(jira): correct issues.component DDL to text and fix lint debt
DoDiODev Jun 29, 2026
f579d3e
feat(python): migrate pydevlake to Pydantic v2 / SQLModel 0.0.38
DoDiODev Jun 30, 2026
e88060f
merge changes from main
DoDiODev Jun 30, 2026
68baf9c
Upgrade mySQL to 8.4.10
DoDiODev Jun 30, 2026
8ce4181
– PostgreSQL 18.1 + DB-agnostic scripts
DoDiODev Jun 30, 2026
2e66817
feat(grafana): upgrade Grafana 12.4.5 → 13.0.2
DoDiODev Jun 30, 2026
1dedb31
Merge branch 'apache:main' into versionUpgrade
DoDiODev Jun 30, 2026
12e5cc1
Optimize Dockerfile.local with build caching
DoDiODev Jul 1, 2026
c9cf1c4
Update Dockerfile for multi-platform support
DoDiODev Jul 1, 2026
1a1f096
fix(sonarqube): change component column to TEXT to prevent truncation
DoDiODev Jul 1, 2026
2033020
fix(sonarqube): harden migration scripts and fix CI Dockerfile reference
DoDiODev Jul 1, 2026
7f333e6
Change rolledback
DoDiODev Jul 1, 2026
a3364f7
fix: resolve merge conflict in migration scripts register.go
DoDiODev Jul 1, 2026
2050954
Merge remote-tracking branch 'origin/main' into versionUpgrade
DoDiODev Jul 7, 2026
e1ad6ae
fix(jira): widen _tool_jira_issues.fix_versions column to text
DoDiODev Jul 8, 2026
cef8a81
docs: update AGENTS.md, bump sqlglot, restore backend/Dockerfile from…
DoDiODev Jul 9, 2026
d493d78
Merge remote-tracking branch 'origin/main' into versionUpgrade
DoDiODev Jul 9, 2026
374c50b
Merge branch 'apache:main' into versionUpgrade
DoDiODev Jul 10, 2026
e7bd958
Merge remote-tracking branch 'upstream/main' into versionUpgrade
DoDiODev Jul 16, 2026
01457a3
Merge remote-tracking branch 'origin/versionUpgrade' into versionUpgrade
DoDiODev Jul 16, 2026
87b644a
Merge remote-tracking branch 'upstream/main' into versionUpgrade
DoDiODev Jul 20, 2026
ebd9928
PR 11 finished
DoDiODev Jul 21, 2026
5639fab
update
DoDiODev Jul 21, 2026
6005b20
Merge remote-tracking branch 'upstream/main' into versionUpgrade
DoDiODev Jul 22, 2026
0ea5d56
build(compose): make devlake image registry configurable
DoDiODev Jul 23, 2026
dd7b3ff
Merge branch 'pr/compose-configurable-image-registry' into versionUpg…
DoDiODev Jul 23, 2026
5ebdee9
build(deps): libgit2 1.3→1.5 / git2go v33→v34 (wave 4d integration)
DoDiODev Jul 23, 2026
9626294
fix(dalgorm): make DropIndexes idempotent by skipping missing indexes
DoDiODev Jul 20, 2026
2f49d1e
Merge remote-tracking branch 'origin/main' into versionUpgrade
DoDiODev Jul 27, 2026
f61521a
fix(jira): _raw_data_*-Spalten in _tool_jira_sprint_reports nachruesten
DoDiODev Jul 28, 2026
21bd30e
build(deps): mockery v2→v3
DoDiODev Jul 28, 2026
9637ad0
Merge wave 4e: mockery v2→v3
DoDiODev Jul 28, 2026
89c661d
Comment update regarding python
DoDiODev Jul 28, 2026
90f78d8
Merge branch 'apache:main' into versionUpgrade
DoDiODev Jul 31, 2026
ed39fbc
test(e2e): run schema-drift migrations in an isolated database
DoDiODev Jul 31, 2026
7ce2a1d
ci: add fork-only workflow for feature branches and stacked PRs
DoDiODev Jul 31, 2026
2ed151d
ci: fix fork CI failures on branches with upgraded dependencies
DoDiODev Jul 31, 2026
efec288
ci: build the lake-builder image in fork CI instead of using the stal…
DoDiODev Jul 31, 2026
05ee942
ci: fix lake-builder image build (golang:1.26-bullseye does not exist)
DoDiODev Jul 31, 2026
53e879a
ci: disable libgit2 test build in lake-builder image
DoDiODev Jul 31, 2026
75af434
lint: suppress aws-sdk-go SA1019 deprecation in q_dev plugin
DoDiODev Jul 31, 2026
eb7fbb3
fix(gh-copilot): create missing AI credit usage breakdown columns
DoDiODev Jul 31, 2026
36b8f12
fix(remote): make fakeplugin CicdScope id a string for pydantic v2
DoDiODev Aug 2, 2026
2dc6c16
fix(pydevlake): serialize remote scope data by runtime type (pydantic…
DoDiODev Aug 2, 2026
2344930
fix(pydevlake): store raw params/data/input as TEXT (pydantic v2/sqlm…
DoDiODev Aug 2, 2026
a276f4a
Merge branch 'apache:main' into versionUpgrade
DoDiODev Aug 3, 2026
8576c91
Merge branch 'apache:main' into versionUpgrade
DoDiODev Aug 4, 2026
2a93833
refactor(deps): drop lib/pq and bump pgx/v5 to v5.10.0
DoDiODev Aug 4, 2026
754a7c2
Merge wave 4k: drop lib/pq, pgx/v5 as direct dependency
DoDiODev Aug 4, 2026
7bc5caa
Merge branch 'apache:main' into versionUpgrade
DoDiODev Aug 6, 2026
d4f8f0c
ci: add fork-only dependency-watchlist workflow (wave 4h gated majors)
DoDiODev Aug 6, 2026
42bc73f
Merge branch 'apache:main' into versionUpgrade
DoDiODev Aug 10, 2026
dfe8e81
ci: remove pull_request trigger from Qodana workflow
DoDiODev Aug 10, 2026
ddb89e5
ci: fix dependency-watchlist summary echo with multiline output
DoDiODev Aug 10, 2026
bb696c9
Merge remote-tracking branch 'upstream/main' into pr/wave4k-pgx
DoDiODev Aug 11, 2026
5c509c7
ci: bootstrap Go 1.26 in Go workflows
DoDiODev Aug 11, 2026
f380a86
Merge remote-tracking branch 'upstream/main' into versionUpgrade
DoDiODev Aug 11, 2026
ccf9f8a
ci: remove fork-only Qodana workflow
DoDiODev Aug 11, 2026
b72beb5
build(deps): refresh container images
DoDiODev Aug 11, 2026
b1f7349
build(deps): bump pinned Node.js to 24.19.0
DoDiODev Aug 11, 2026
a41a232
build(deps): refresh frontend dependencies
DoDiODev Aug 11, 2026
b5f18e9
Merge branch 'pr/wave4i-a' into versionUpgrade
DoDiODev Aug 11, 2026
67a74e9
docs(agents): warn that the local dev DB volumes are production data
DoDiODev Aug 11, 2026
ea93206
ci: bootstrap mockery 3 in unit-test workflow
DoDiODev Aug 12, 2026
64e3079
Merge remote-tracking branch 'upstream/main' into pr/wave4k-pgx
DoDiODev Aug 12, 2026
71484d3
ci: bootstrap Go 1.26 in Go workflows
DoDiODev Aug 11, 2026
a215750
ci: bootstrap mockery 3 in lint workflow
DoDiODev Aug 12, 2026
0f807da
Merge remote-tracking branch 'upstream/main' into versionUpgrade
DoDiODev Aug 12, 2026
6cafb4d
test(gitextractor): cover the go-git repo collector
DoDiODev Aug 12, 2026
879c8f0
build(deps): bump go-git v5.12.0 -> v5.19.2
DoDiODev Aug 12, 2026
30e0a64
build(deps): bump golang.org/x/crypto, x/net and x/oauth2
DoDiODev Aug 12, 2026
5bd265e
build(deps): bump golang-jwt/jwt/v5 off the release candidate, logrus…
DoDiODev Aug 12, 2026
05446f1
Merge branch 'pr/wave4i-b' into versionUpgrade
DoDiODev Aug 12, 2026
73768f2
Merge branch 'pr/wave4l-go-git' into versionUpgrade
DoDiODev Aug 12, 2026
5a7923d
fix(gitlab): add missing commit_updated_at column used by MR incremen…
DoDiODev Aug 12, 2026
a39584c
Merge branch 'pr/gitlab-mr-commit-updated-at' into versionUpgrade
DoDiODev Aug 12, 2026
be49b66
style(gitlab): gofmt migration script
DoDiODev Aug 12, 2026
d80ab49
Merge branch 'apache:main' into versionUpgrade
DoDiODev Aug 13, 2026
2454477
fix(ci): mark the workspace as a git safe.directory in the lint job
DoDiODev Aug 14, 2026
80cb050
build(deps): align x/net and logrus with the versions opened as #9054
DoDiODev Aug 17, 2026
8bfc2eb
Merge remote-tracking branch 'upstream/main' into versionUpgrade
DoDiODev Aug 17, 2026
b1a9c6f
docs(agents): keep setup script aligned with version changes
DoDiODev Aug 17, 2026
06e8de6
chore(deps): bump CI Go bootstrap to 1.26.6
DoDiODev Aug 17, 2026
6928bf3
Merge wave 4m Go toolchain security
DoDiODev Aug 17, 2026
f123c16
build(deps): refresh Python 3.11 Poetry locks for pydevlake/azuredevo…
DoDiODev Aug 18, 2026
f3c0680
Merge wave 4n Python-3.11-Lockfile-Security (pr/wave4n-python-lock-se…
DoDiODev Aug 18, 2026
81dbf8a
Merge remote-tracking branch 'upstream/main' into versionUpgrade
DoDiODev Aug 18, 2026
45b02c2
build: update Jira datasource fixture
DoDiODev Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
},
"ghcr.io/devcontainers-extra/features/poetry:2": {},
"ghcr.io/devcontainers/features/node:1": {
"version": "18"
"version": "24"
}
},
"forwardPorts": [
Expand Down
8 changes: 7 additions & 1 deletion .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,18 @@ services:
grafana:
image: devlake.docker.scarf.sh/apache/devlake-dashboard:latest
ports:
- 3002:3000
- 3001:3000
volumes:
- grafana-storage:/var/lib/grafana
environment:
GF_SERVER_ROOT_URL: "http://localhost:4000/grafana"
GF_USERS_DEFAULT_THEME: "light"
DATABASE_TYPE: mysql
DATABASE_HOST: mysql
DATABASE_PORT: 3306
DATABASE_NAME: lake
DATABASE_USER: merico
DATABASE_PASSWORD: merico
MYSQL_URL: mysql:3306
MYSQL_DATABASE: lake
MYSQL_USER: merico
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ name: Build-Images-Push-Docker
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USER }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DEVLAKE_BACKEND_DOCKERFILE: ./backend/Dockerfile
DEVLAKE_CONFIG_UI_DOCKERFILE: ./config-ui/Dockerfile
DEVLAKE_GRAFANA_DOCKERFILE: ./grafana/Dockerfile
on:
push:
tags:
Expand Down Expand Up @@ -55,6 +58,7 @@ jobs:
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
context: ./backend
file: ${{ env.DEVLAKE_BACKEND_DOCKERFILE }}
push: true
target: builder
tags: ${{ secrets.DOCKERHUB_OWNER }}/devlake:amd64-builder
Expand Down Expand Up @@ -87,6 +91,7 @@ jobs:
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
context: ./backend
file: ${{ env.DEVLAKE_BACKEND_DOCKERFILE }}
push: true
target: base
tags: ${{ secrets.DOCKERHUB_OWNER }}/devlake:base
Expand Down Expand Up @@ -130,6 +135,7 @@ jobs:
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
context: ./backend
file: ${{ env.DEVLAKE_BACKEND_DOCKERFILE }}
push: false
target: build
tags: ${{ secrets.DOCKERHUB_OWNER }}/devlake:build-cache-${{ matrix.platform }}
Expand Down Expand Up @@ -197,6 +203,7 @@ jobs:
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
context: ./backend
file: ${{ env.DEVLAKE_BACKEND_DOCKERFILE }}
push: true
tags: ${{ steps.get_push_tags.outputs.TAGS }}
platforms: linux/amd64,linux/arm64
Expand Down Expand Up @@ -236,9 +243,11 @@ jobs:
- name: config-ui
image: devlake-config-ui
context: config-ui
dockerfile: ./config-ui/Dockerfile
- name: grafana
image: devlake-dashboard
context: grafana
dockerfile: ./grafana/Dockerfile
steps:
- name: Free Disk Space
run: |
Expand Down Expand Up @@ -276,6 +285,7 @@ jobs:
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
context: ${{ matrix.build.context }}
file: ${{ matrix.build.dockerfile }}
push: true
tags: ${{ steps.get_push_tags.outputs.TAGS }}
platforms: linux/amd64,linux/arm64
160 changes: 160 additions & 0 deletions .github/workflows/dependency-watchlist.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Fork-only watchdog for the "extern gated" dependency majors tracked in
# scripts-local/pr-descriptions/plan-wave4hGated.prompt.md (swag v1->v2,
# TypeScript 6->7, Node 24->26 LTS). Dependabot itself cannot express "wait
# until this external condition holds" - it only understands static
# name/version-range/update-type matchers (see `ignore:` in the planned
# `.github/dependabot.yml`, Wave 5). This workflow replaces the manual
# "re-check with curl at every Pre-Wave-Gate" step with an automatic,
# idempotent check that only opens/updates a tracking issue when a watched
# item's unblock condition newly holds.
#
# Guarded so it never runs in apache/devlake should this file ever be merged
# upstream (dependency-watchlist / wave-based planning is fork-only process,
# not an upstream convention).
#
# NOTE: GitHub disables `schedule`-triggered workflows on forks after 60 days
# of repo inactivity. Re-enable with `gh workflow enable dependency-watchlist`
# if the scheduled run silently stops appearing. `workflow_dispatch` always
# works regardless.
name: dependency-watchlist

on:
schedule:
- cron: '0 6 * * 1' # weekly, Monday 06:00 UTC - same cadence as dependabot
workflow_dispatch:

permissions:
issues: write

jobs:
check-watchlist:
name: check gated majors (wave 4h)
if: github.repository != 'apache/devlake'
runs-on: ubuntu-latest
steps:
- name: Query external unblock conditions
id: check
run: |
python3 - <<'PYEOF' >> "$GITHUB_OUTPUT"
import json, re, urllib.request

def get(url):
req = urllib.request.Request(url, headers={"User-Agent": "devlake-dependency-watchlist"})
with urllib.request.urlopen(req, timeout=20) as r:
return json.load(r)

findings = []

# 1. swag v1 -> v2: unblocked once the latest v2 tag is not a pre-release
try:
swag = get("https://proxy.golang.org/github.com/swaggo/swag/v2/@latest")
ver = swag.get("Version", "")
prerelease = bool(re.search(r'-(rc|beta|alpha)', ver, re.I))
findings.append(("swag-v2", ver, not prerelease,
f"github.com/swaggo/swag/v2 latest = {ver}"))
except Exception as e:
findings.append(("swag-v2", "ERROR", False, str(e)))

# 2. Node 24 -> 26: unblocked once a v26 release has lts != false
try:
idx = get("https://nodejs.org/dist/index.json")
node26 = next((x for x in idx if x["version"].startswith("v26")), None)
lts_ok = bool(node26 and node26.get("lts"))
findings.append(("node-26-lts", node26["version"] if node26 else "n/a", lts_ok,
f"node v26 entry: lts={node26.get('lts') if node26 else None}"))
except Exception as e:
findings.append(("node-26-lts", "ERROR", False, str(e)))

# 3. TypeScript 6 -> 7: flag (not a hard yes/no) once typescript-eslint's
# declared peer range for `typescript` appears to include a 7.x major.
# This is a heuristic - a real "yes" still requires `yarn build && yarn lint`
# against typescript@7 locally before drawing conclusions.
try:
ts = get("https://registry.npmjs.org/typescript/latest")
ts_ver = ts.get("version", "")
tse = get("https://registry.npmjs.org/typescript-eslint/latest")
peer = (tse.get("peerDependencies") or {}).get("typescript", "")
likely_supported = bool(re.search(r'(<\s*8\b|\^7|>=\s*7)', peer))
findings.append(("typescript-7", ts_ver, likely_supported,
f"typescript latest={ts_ver}, typescript-eslint peer.typescript=\"{peer}\""))
except Exception as e:
findings.append(("typescript-7", "ERROR", False, str(e)))

summary_lines = []
any_unblocked = False
for key, ver, unblocked, detail in findings:
status = "UNBLOCKED" if unblocked else "gated"
summary_lines.append(f"- `{key}`: **{status}** ({detail})")
if unblocked:
any_unblocked = True

print("summary<<EOF")
print("\n".join(summary_lines))
print("EOF")
print(f"any_unblocked={'true' if any_unblocked else 'false'}")

# per-item outputs for the issue step
for key, ver, unblocked, detail in findings:
safe_key = key.replace('-', '_')
print(f"{safe_key}_unblocked={'true' if unblocked else 'false'}")
print(f"{safe_key}_detail={detail}")
PYEOF

- name: Print summary
env:
SUMMARY: ${{ steps.check.outputs.summary }}
run: |
printf '%s\n' "$SUMMARY"
printf '%s\n' "$SUMMARY" >> "$GITHUB_STEP_SUMMARY"

- name: Ensure "dependencies" label exists
if: steps.check.outputs.any_unblocked == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# `gh issue create --label` fails hard if the label doesn't exist yet
# (only GitHub's default label set ships with a fresh fork) - create it
# idempotently instead of assuming it's there.
gh label create dependencies --color 0366d6 \
--description "Dependency / tooling version updates" --force

- name: Open/refresh tracking issue if something newly unblocked
if: steps.check.outputs.any_unblocked == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SUMMARY: ${{ steps.check.outputs.summary }}
run: |
TITLE="[dependency-watchlist] wave 4h: mindestens ein Item unblocked"
EXISTING=$(gh issue list --state open --search "in:title \"$TITLE\"" --json number --jq '.[0].number' || true)
BODY="Automatischer Re-Check (siehe \`scripts-local/pr-descriptions/plan-wave4hGated.prompt.md\`):

$SUMMARY

Nächster Schritt: Item aus der Watchlist herauslösen, eigenen refined Plan
+ \`pr/wave4h-<topic>\`-Branch anlegen, STATUS.md §2 nachziehen. Ein
UNBLOCKED-Signal ist kein Freifahrtschein - vor dem Branch weiterhin
lokal validieren (z. B. \`yarn build && yarn lint\` gegen die neue
Major-Version)."
if [ -n "$EXISTING" ]; then
gh issue comment "$EXISTING" --body "$BODY"
else
gh issue create --title "$TITLE" --body "$BODY" --label dependencies
fi

Loading
Loading