Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
1e5114a
feat(03-01): create repo-root vcpkg authority
MaxRev-Dev Apr 23, 2026
feba8b9
feat(03-01): commit reproducible vcpkg lockfile
MaxRev-Dev Apr 23, 2026
e701271
feat(03-02): switch unix and macOS wrappers to manifest installs
MaxRev-Dev Apr 23, 2026
e230b9a
feat(03-02): align windows wrapper and cache authority
MaxRev-Dev Apr 23, 2026
1a0f4a1
feat(03-03): rewire shared HDF source lifecycle
MaxRev-Dev Apr 23, 2026
083ee50
feat(03-03): point HDF configure steps at cloned source
MaxRev-Dev Apr 23, 2026
ce09698
fix(ci): repair manifest-mode workflow integration
MaxRev-Dev Apr 27, 2026
845ba30
fix(ci): remove duplicate vcpkg baseline
MaxRev-Dev Apr 27, 2026
8bc5408
fix(ci): retry transient package builds
MaxRev-Dev Apr 27, 2026
8cce1b0
fix(ci): allow one more transient retry
MaxRev-Dev Apr 27, 2026
2a8e918
fix(ci): silence nested make version probe
MaxRev-Dev Apr 27, 2026
68144b8
fix(ci): widen transient retry budget
MaxRev-Dev Apr 27, 2026
01b9940
fix(ci): retry autoconf bootstrap download
MaxRev-Dev Apr 28, 2026
1c76c26
refactor(vcpkg): remove stale package lists
MaxRev-Dev Apr 28, 2026
79b1e67
fix(ci): drop empty linux host cache
MaxRev-Dev Apr 28, 2026
f1e5b6e
fix(ci): prefetch thrift distfile for linux
MaxRev-Dev Apr 28, 2026
123b215
fix(ci): narrow final bundle artifact inputs
MaxRev-Dev Apr 28, 2026
7d2ff3d
refactor(vcpkg): move manifest files to shared
MaxRev-Dev Apr 28, 2026
f58704e
fix(ci): prefetch boost rational on macos
MaxRev-Dev Apr 28, 2026
c3f0712
revert(ci): drop macos prefetch workaround
MaxRev-Dev Apr 29, 2026
a9bd7b7
fix(ci): broaden vcpkg cache restore keys
MaxRev-Dev Apr 30, 2026
73ae915
perf(ci): reuse cached build outputs
MaxRev-Dev May 1, 2026
3504b1b
perf(ci): broaden build cache reuse
MaxRev-Dev May 1, 2026
3151aff
chore(release): bump GDAL to 3.12.4
MaxRev-Dev May 4, 2026
c2f7a1f
fix(ci): trim windows build cache footprint
MaxRev-Dev May 4, 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
7 changes: 4 additions & 3 deletions .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
with:
path: |
vcpkg-archives/
key: vcpkg-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'osx/vcpkg-makefile') }}
key: vcpkg-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'osx/vcpkg-makefile', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }}
restore-keys: |
vcpkg-${{ matrix.os }}-${{ matrix.arch }}-

Expand All @@ -76,10 +76,11 @@ jobs:
build-osx/gdal-build/
build-osx/vcpkg/installed/
build-osx/.build-state.json
build-osx/.build-state-vcpkg-*.txt
build-osx/.build-times.txt
key: builds-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'osx/gdal-makefile', 'shared/common.mk') }}
key: builds-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'osx/gdal-makefile', 'shared/common.mk', 'osx/vcpkg-makefile', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }}
restore-keys: |
builds-${{ matrix.os }}-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt') }}-
builds-${{ matrix.os }}-${{ matrix.arch }}-

# Layer 3: .NET SDK packages
- name: Cache .NET packages
Expand Down
33 changes: 32 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,39 @@ jobs:

- uses: actions/download-artifact@v6.0.0
with:
pattern: packages-*
name: packages-core
path: nuget
merge-multiple: true

- uses: actions/download-artifact@v6.0.0
with:
name: packages-unix-x64
path: nuget
merge-multiple: true

- uses: actions/download-artifact@v6.0.0
with:
name: packages-unix-arm64
path: nuget
merge-multiple: true

- uses: actions/download-artifact@v6.0.0
with:
name: packages-win-x64
path: nuget
merge-multiple: true

- uses: actions/download-artifact@v6.0.0
with:
name: packages-osx-x64
path: nuget
merge-multiple: true

- uses: actions/download-artifact@v6.0.0
with:
name: packages-osx-arm64
path: nuget
merge-multiple: true

- name: Remove old formats
run: |
Expand Down
23 changes: 5 additions & 18 deletions .github/workflows/unix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,21 +56,6 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.11.1

- name: Cache restore
uses: actions/cache@v4.3.0
with:
path: |
.dotnet/
ci/cache/
key: ${{ matrix.os }}-buildx-${{ matrix.arch }}-${{ github.run_id }}
restore-keys: |
${{ matrix.os }}-buildx-${{ matrix.arch }}-

- name: Ensure cache directories
run: |
mkdir -p ci/cache/.dotnet
mkdir -p ci/cache/vcpkg-archives

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
Expand Down Expand Up @@ -105,8 +90,8 @@ jobs:
DOTNET_VERSION=${{ inputs.dotnet-version }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha,scope=gdalnetcore-${{ matrix.arch }}
cache-to: type=gha,scope=gdalnetcore-${{ matrix.arch }},mode=max
cache-from: type=gha,scope=gdalnetcore-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'unix/vcpkg-makefile', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }}
cache-to: type=gha,scope=gdalnetcore-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'unix/vcpkg-makefile', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }},mode=max

- name: Build and push on local runner
uses: docker/build-push-action@v5
Expand All @@ -124,6 +109,8 @@ jobs:
DOTNET_VERSION=${{ inputs.dotnet-version }}
DOTNET_INSTALL_DIR=/build/ci/cache/.dotnet
VCPKG_DEFAULT_BINARY_CACHE=/build/ci/cache/vcpkg-archives/
cache-from: type=gha,scope=gdalnetcore-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'unix/vcpkg-makefile', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }}
cache-to: type=gha,scope=gdalnetcore-${{ matrix.arch }}-${{ hashFiles('shared/GdalCore.opt', 'unix/vcpkg-makefile', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }},mode=max

- name: Extract artifacts
run: |
Expand Down Expand Up @@ -311,4 +298,4 @@ jobs:
if: ${{ github.event.pull_request.merged == true || github.ref == 'refs/heads/main' || fromJson(inputs.is-version-branch) }}
run: |
make -f push-packages-makefile PRERELEASE=${{ inputs.is-pre-release }} INCLUDE_CORE=1 \
BUILD_NUMBER_TAIL=${{ github.run_number }} API_KEY_GITHUB=${{ secrets.API_KEY_GITHUB }} API_KEY_NUGET=${{ secrets.API_KEY_NUGET }}
BUILD_NUMBER_TAIL=${{ github.run_number }} API_KEY_GITHUB=${{ secrets.API_KEY_GITHUB }} API_KEY_NUGET=${{ secrets.API_KEY_NUGET }}
37 changes: 27 additions & 10 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,25 +52,31 @@ jobs:
with:
path: |
vcpkg-archives/
key: vcpkg-${{ runner.os }}-${{ hashFiles('shared/GdalCore.opt', 'win/install.ps1') }}
key: vcpkg-${{ runner.os }}-${{ hashFiles('shared/GdalCore.opt', 'win/install.ps1', 'win/vcpkg-makefile.vc', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }}
restore-keys: |
vcpkg-${{ runner.os }}-

# Layer 2: Build outputs (PROJ, GDAL, VCPKG installed, SDK)
# Windows caches entire build-win/ because install.ps1 manages all
# subdirectories internally (gdal-build/, proj-build/, vcpkg/, sdk/, downloads/)
# Note: Windows install.ps1 does not use build state tracking.
# Cache hit avoids re-downloading but does not skip compilation.
# Build state integration for Windows is deferred to Phase 2.
# Keep this cache narrow enough that the separate VCPKG archive cache
# is less likely to be evicted. Source clones and downloads are rebuilt
# on demand, but the installed outputs/state stamps stay reusable.
- name: Cache build outputs
id: cache-builds
uses: actions/cache@v4
with:
path: |
build-win/
key: builds-${{ runner.os }}-${{ hashFiles('shared/GdalCore.opt', 'win/install.ps1') }}
build-win/.build-state-*.txt
build-win/gdal-build/
build-win/proj-build/
build-win/gdal-cmake-temp/swig/csharp/
build-win/sdk/release-1930-x64/
build-win/vcpkg/
!build-win/vcpkg/buildtrees/
!build-win/vcpkg/downloads/
!build-win/vcpkg/packages/
key: builds-${{ runner.os }}-${{ hashFiles('shared/GdalCore.opt', 'win/install.ps1', 'win/functions.psm1', 'win/partials.psm1', 'win/vcpkg-makefile.vc', 'shared/vcpkg.json', 'shared/vcpkg-configuration.json', 'shared/vcpkg-lock.json') }}
restore-keys: |
builds-${{ runner.os }}-${{ hashFiles('shared/GdalCore.opt') }}-
builds-${{ runner.os }}-

# Layer 3: .NET SDK packages
- name: Cache .NET packages
Expand All @@ -91,7 +97,18 @@ jobs:
id: compile-source
run: |
git config --system core.longpaths true
./install.ps1 -buildNumberTail ${{ github.run_number }} -preRelease $${{ inputs.is-pre-release }}
$maxAttempts = 5
for ($attempt = 1; $attempt -le $maxAttempts; $attempt++) {
./install.ps1 -buildNumberTail ${{ github.run_number }} -preRelease $${{ inputs.is-pre-release }}
if ($LASTEXITCODE -eq 0) {
break
}
if ($attempt -ge $maxAttempts) {
exit $LASTEXITCODE
}
Write-Host "Retrying Windows package build after a transient failure..."
Start-Sleep -Seconds 15
}
echo "GDAL_VERSION=$env:GDAL_VERSION" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append

- name: Store metadata as artifact
Expand Down
24 changes: 22 additions & 2 deletions ci/Dockerfile.unix
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,13 @@ RUN echo 'deb http://deb.debian.org/debian bookworm main' > /etc/apt/sources.lis

# Install newer autoconf (2.71) from source since Debian 11 has older version
RUN cd /tmp && \
wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz && \
for url in \
https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz \
https://mirrors.kernel.org/gnu/autoconf/autoconf-2.71.tar.gz; do \
if curl -fsSL --retry 5 --retry-delay 5 --retry-all-errors "$url" -o autoconf-2.71.tar.gz; then \
break; \
fi; \
done && \
tar -xzf autoconf-2.71.tar.gz && \
cd autoconf-2.71 && \
./configure --prefix=/usr/local && \
Expand Down Expand Up @@ -85,6 +91,9 @@ ARG VCPKG_DEFAULT_BINARY_CACHE=/build/ci/cache/vcpkg-archives/
RUN mkdir -p $VCPKG_DEFAULT_BINARY_CACHE
COPY --from=base /tmp/gdal-netcore-env /tmp/gdal-netcore-env
COPY --from=base /tmp/gdal-netcore-arch /tmp/gdal-netcore-arch
COPY shared/vcpkg.json /build/shared/vcpkg.json
COPY shared/vcpkg-configuration.json /build/shared/vcpkg-configuration.json
COPY shared/vcpkg-lock.json /build/shared/vcpkg-lock.json
COPY shared/GdalCore.opt /build/shared/
COPY unix/RID.opt /build/unix/RID.opt
COPY unix/vcpkg-makefile /build/unix/
Expand All @@ -105,6 +114,17 @@ RUN chmod +x /build/ci/vcpkg-error-handler.sh
RUN --mount=type=cache,target=/build/ci/cache/vcpkg-archives \
--mount=type=cache,target=/build/build-unix/vcpkg/buildtrees \
--mount=type=cache,target=/build/build-unix/vcpkg/downloads \
mkdir -p /build/build-unix/vcpkg/downloads && \
if [ ! -f /build/build-unix/vcpkg/downloads/thrift-0.22.0.tar.gz ]; then \
for url in \
https://downloads.apache.org/thrift/0.22.0/thrift-0.22.0.tar.gz \
https://dlcdn.apache.org/thrift/0.22.0/thrift-0.22.0.tar.gz \
https://archive.apache.org/dist/thrift/0.22.0/thrift-0.22.0.tar.gz; do \
if curl -fsSL --retry 5 --retry-delay 5 --retry-all-errors "$url" -o /build/build-unix/vcpkg/downloads/thrift-0.22.0.tar.gz; then \
break; \
fi; \
done; \
fi && \
set -a && . /tmp/gdal-netcore-env && set +a; \
make -f vcpkg-makefile $(cat /tmp/gdal-netcore-arch) || { /build/ci/vcpkg-error-handler.sh /build/build-unix /build/vcpkg-error-artifacts; exit 1; }

Expand Down Expand Up @@ -171,4 +191,4 @@ COPY --from=package-stage /build/tests/gdal-formats /build/tests/gdal-formats
COPY --from=package-stage /build/nuget /build/nuget
# copy error artifacts if they exist
COPY --from=package-stage /build/vcpkg-error-artifacts /build/vcpkg-error-artifacts
ENTRYPOINT ["bash"]
ENTRYPOINT ["bash"]
11 changes: 10 additions & 1 deletion osx/before-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,13 @@ brew install make pkg-config autoconf automake \
brew install --ignore-dependencies pipx || python3 -m pip install --user pipx

# issue with libtool on macOS https://github.com/Homebrew/homebrew-core/issues/180040
brew reinstall libtool
brew reinstall libtool

if [ -n "${GITHUB_PATH:-}" ]; then
for formula in make libtool; do
prefix=$(brew --prefix "$formula" 2>/dev/null || true)
if [ -n "$prefix" ] && [ -d "$prefix/libexec/gnubin" ]; then
echo "$prefix/libexec/gnubin" >> "$GITHUB_PATH"
fi
done
fi
5 changes: 2 additions & 3 deletions osx/gdal-makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ TARGETS = hdf proj gdal

all: $(TARGETS)
@echo "$(LOG_PREFIX) Everything looks good. Linux libraries for GDAL is ready to packaging!"
@echo "$(LOG_PREFIX) Installed libraries (vcpkg static): $(VCPKG_REQUIRE_OSX)"
@echo "$(LOG_PREFIX) Installed libraries (vcpkg dynamic): $(VCPKG_REQUIRE_OSX_DYNAMIC)"
@echo "$(LOG_PREFIX) Installed libraries (vcpkg): shared manifest features"
@echo "$(LOG_PREFIX) Compiled libraries: $(TARGETS)"

pre_vcpkg:
Expand All @@ -34,7 +33,7 @@ configure_hdf:
@if [[ -d "$(BUILD_ROOT)/hdf-build" ]]; then rm -r "$(BUILD_ROOT)/hdf-build"; fi;

-mkdir -p $(HDF_CMAKE_TMP)
@cd $(HDF_CMAKE_TMP) && cmake $(HDF_SOURCE) \
@cd $(HDF_CMAKE_TMP) && cmake $(HDF_ROOT) \
-DCMAKE_INSTALL_PREFIX=$(BUILD_ROOT)/hdf-build -Wno-dev \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS="-fPIC -w" \
Expand Down
Loading
Loading