33 workflow_dispatch :
44 push :
55 branches : [ main ]
6+
67jobs :
7- build :
8+ # 后端与前端镜像并行构建,互不阻塞
9+ backend :
810 runs-on : ubuntu-latest
911 steps :
1012 - uses : actions/checkout@v4
@@ -21,31 +23,21 @@ jobs:
2123
2224 - name : Extract version from Directory.Packages.props
2325 id : get_version
24- shell : pwsh
26+ shell : bash
2527 run : |
26- $ErrorActionPreference = 'Stop'
27- [xml]$xml = Get-Content -Raw 'Directory.Packages.props'
28- $pg = $xml.Project.PropertyGroup
29- $versionTemplate = [string]$pg.Version
30- if ([string]::IsNullOrWhiteSpace($versionTemplate)) { throw 'Version not found in Directory.Packages.props' }
31- $props = @{}
32- foreach ($n in $pg.ChildNodes) {
33- if ($n.NodeType -eq [System.Xml.XmlNodeType]::Element) {
34- $props[$n.Name] = [string]$n.InnerText
35- }
36- }
37- $props['TimeStamp'] = (Get-Date -AsUTC).ToString('yyyyMMdd')
38- $unresolved = New-Object System.Collections.Generic.List[string]
39- $finalVersion = [regex]::Replace($versionTemplate, '\$\(([A-Za-z0-9_.-]+)\)', {
40- param($m)
41- $name = $m.Groups[1].Value
42- if ($props.ContainsKey($name) -and -not [string]::IsNullOrWhiteSpace($props[$name])) { $props[$name] } else { $unresolved.Add($name) | Out-Null; '' }
43- })
44- if ($unresolved.Count -gt 0) { Write-Host "[warn] Unresolved version tokens -> $($unresolved -join ', ')" }
45- if ([string]::IsNullOrWhiteSpace($finalVersion)) { throw 'Resolved version is empty' }
46- "version=$finalVersion" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
47- Write-Host "Version template: $versionTemplate"
48- Write-Host "Final version: $finalVersion"
28+ version="$(sed -n 's/.*<Version>\(.*\)<\/Version>.*/\1/p' Directory.Packages.props | head -1 | tr -d '[:space:]')"
29+ if [ -z "$version" ]; then
30+ echo "Version not found in Directory.Packages.props" >&2
31+ exit 1
32+ fi
33+ case "$version" in
34+ *'$('*)
35+ echo "Unresolved version token in template: $version" >&2
36+ exit 1
37+ ;;
38+ esac
39+ echo "version=$version" >> "$GITHUB_OUTPUT"
40+ echo "Final version: $version"
4941
5042 - name : Build and push opendeepwiki
5143 uses : docker/build-push-action@v5
@@ -56,10 +48,47 @@ jobs:
5648 push : true
5749 provenance : false
5850 sbom : false
51+ # GHA 层缓存:apt/pip、restore、编译层在多次构建间复用
52+ # scope 与 release.yml 保持一致,可跨 workflow 共享缓存
53+ cache-from : type=gha,scope=backend
54+ cache-to : type=gha,mode=max,scope=backend
5955 tags : |
6056 crpi-j9ha7sxwhatgtvj4.cn-shenzhen.personal.cr.aliyuncs.com/open-deepwiki/opendeepwiki:latest
6157 crpi-j9ha7sxwhatgtvj4.cn-shenzhen.personal.cr.aliyuncs.com/open-deepwiki/opendeepwiki:${{ steps.get_version.outputs.version }}
6258
59+ web :
60+ runs-on : ubuntu-latest
61+ steps :
62+ - uses : actions/checkout@v4
63+
64+ - name : Set up Docker Buildx
65+ uses : docker/setup-buildx-action@v3
66+
67+ - name : Login to Docker Registry
68+ uses : docker/login-action@v3
69+ with :
70+ registry : crpi-j9ha7sxwhatgtvj4.cn-shenzhen.personal.cr.aliyuncs.com
71+ username : ${{ secrets.DOCKER_USERNAME }}
72+ password : ${{ secrets.DOCKER_PASSWORD }}
73+
74+ - name : Extract version from Directory.Packages.props
75+ id : get_version
76+ shell : bash
77+ run : |
78+ version="$(sed -n 's/.*<Version>\(.*\)<\/Version>.*/\1/p' Directory.Packages.props | head -1 | tr -d '[:space:]')"
79+ if [ -z "$version" ]; then
80+ echo "Version not found in Directory.Packages.props" >&2
81+ exit 1
82+ fi
83+ case "$version" in
84+ *'$('*)
85+ echo "Unresolved version token in template: $version" >&2
86+ exit 1
87+ ;;
88+ esac
89+ echo "version=$version" >> "$GITHUB_OUTPUT"
90+ echo "Final version: $version"
91+
6392 - name : Build and push opendeepwiki-web
6493 uses : docker/build-push-action@v5
6594 with :
6998 push : true
7099 provenance : false
71100 sbom : false
101+ cache-from : type=gha,scope=web
102+ cache-to : type=gha,mode=max,scope=web
72103 tags : |
73104 crpi-j9ha7sxwhatgtvj4.cn-shenzhen.personal.cr.aliyuncs.com/open-deepwiki/opendeepwiki-web:latest
74105 crpi-j9ha7sxwhatgtvj4.cn-shenzhen.personal.cr.aliyuncs.com/open-deepwiki/opendeepwiki-web:${{ steps.get_version.outputs.version }}
0 commit comments