Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
6 changes: 3 additions & 3 deletions .github/workflows/install-ccache.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ param (
[string] $Destination
)

$version = "4.8"
$folder = "ccache-$version-windows-x86_64"
$version = "4.10.2"
$folder="ccache-$version-windows-x86_64"
$url = "https://github.com/ccache/ccache/releases/download/v$version/$folder.zip"
$expectedSha256 = "A2B3BAB4BB8318FFC5B3E4074DC25636258BC7E4B51261F7D9BEF8127FDA8309"
$expectedSha256 = "6252F081876A9A9F700FAE13A5AEC5D0D486B28261D7F1F72AC11C7AD9DF4DA9"

$ErrorActionPreference = "Stop"

Expand Down
37 changes: 29 additions & 8 deletions .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,44 @@ jobs:
strategy:
matrix:
config: [

{
os: ubuntu-24.04,
cmakeBuildType: RelWithDebInfo,
asanEnabled: false,
cudaEnabled: false,
e2eTests: false,
checkCodeFormat: true,
},
{
os: ubuntu-22.04,
cmakeBuildType: Release,
asanEnabled: false,
cudaEnabled: false,
e2eTests: true,
checkCodeFormat: true,
},
{
os: ubuntu-22.04,
cmakeBuildType: Release,
asanEnabled: false,
cudaEnabled: true,
e2eTests: false,
checkCodeFormat: false,
},
{
os: ubuntu-22.04,
cmakeBuildType: Release,
asanEnabled: true,
cudaEnabled: true,
cudaEnabled: false,
e2eTests: false,
checkCodeFormat: false,
},
{
os: ubuntu-22.04,
cmakeBuildType: ClangTidy,
asanEnabled: false,
cudaEnabled: false,
e2eTests: false,
checkCodeFormat: false,
},
]
Expand All @@ -62,14 +73,15 @@ jobs:
key: v${{ env.COMPILER_CACHE_VERSION }}-${{ matrix.config.os }}-${{ matrix.config.cmakeBuildType }}-${{ matrix.config.asanEnabled }}--${{ matrix.config.cudaEnabled }}-${{ github.run_id }}-${{ github.run_number }}
restore-keys: v${{ env.COMPILER_CACHE_VERSION }}-${{ matrix.config.os }}-${{ matrix.config.cmakeBuildType }}-${{ matrix.config.asanEnabled }}--${{ matrix.config.cudaEnabled }}
path: ${{ env.COMPILER_CACHE_DIR }}

- name: Install compiler cache
run: |
mkdir -p "$CCACHE_DIR" "$CTCACHE_DIR"
echo "$COMPILER_CACHE_DIR/bin" >> $GITHUB_PATH

if [ -f "$COMPILER_CACHE_DIR/bin/ccache" ]; then
exit 0
fi

set -x
wget https://github.com/ccache/ccache/releases/download/v4.8.2/ccache-4.8.2-linux-x86_64.tar.xz
echo "0b33f39766fe9db67f40418aed6a5b3d7b2f4f7fab025a8213264b77a2d0e1b1 ccache-4.8.2-linux-x86_64.tar.xz" | sha256sum --check
Expand All @@ -81,26 +93,26 @@ jobs:
echo "108b087f156a9fe7da0c796de1ef73f5855d2a33a27983769ea39061359a40fc ${ctcache_commit_id}.zip" | sha256sum --check
unzip "${ctcache_commit_id}.zip"
mv ctcache-${ctcache_commit_id}/clang-tidy* "$COMPILER_CACHE_DIR/bin"

- name: Check code format
if: matrix.config.checkCodeFormat
run: |
set +x -euo pipefail
sudo apt-get update && sudo apt-get install -y clang-format-14 black
./scripts/format/clang_format.sh
python -m pip install clang-format==19.1.0
./scripts/format/c++.sh
git diff --name-only
git diff --exit-code || (echo "Code formatting failed" && exit 1)

- name: Setup Ubuntu
run: |
sudo apt-get update && sudo apt-get install -y \
build-essential \
cmake \
ninja-build \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-system-dev \
libeigen3-dev \
libsuitesparse-dev \
libceres-dev \
libflann-dev \
libfreeimage-dev \
Expand All @@ -116,7 +128,9 @@ jobs:
libcgal-qt5-dev \
libgl1-mesa-dri \
libunwind-dev \
libcurl4-openssl-dev \
xvfb

if [ "${{ matrix.config.cudaEnabled }}" == "true" ]; then
if [ "${{ matrix.config.os }}" == "ubuntu-20.04" ]; then
sudo apt-get install -y \
Expand All @@ -134,16 +148,19 @@ jobs:
echo "CUDAHOSTCXX=/usr/bin/g++-10" >> $GITHUB_ENV
fi
fi

if [ "${{ matrix.config.asanEnabled }}" == "true" ]; then
sudo apt-get install -y clang-15 libomp-15-dev
echo "CC=/usr/bin/clang-15" >> $GITHUB_ENV
echo "CXX=/usr/bin/clang++-15" >> $GITHUB_ENV
fi

if [ "${{ matrix.config.cmakeBuildType }}" == "ClangTidy" ]; then
sudo apt-get install -y clang-15 clang-tidy-15 libomp-15-dev
echo "CC=/usr/bin/clang-15" >> $GITHUB_ENV
echo "CXX=/usr/bin/clang++-15" >> $GITHUB_ENV
fi

- name: Upgrade CMake
run: |
CMAKE_VERSION=3.28.6
Expand All @@ -152,6 +169,7 @@ jobs:
tar -xzf ${CMAKE_DIR}.tar.gz
sudo cp -r ${CMAKE_DIR}/* /usr/local/
rm -rf ${CMAKE_DIR}*

- name: Configure and build
run: |
set -x
Expand All @@ -167,6 +185,7 @@ jobs:
-DTESTS_ENABLED=ON \
-DASAN_ENABLED=${{ matrix.config.asanEnabled }}
ninja -k 10000

- name: Run tests
if: ${{ matrix.config.cmakeBuildType != 'ClangTidy' }}
run: |
Expand All @@ -176,15 +195,17 @@ jobs:
sleep 3
cd build
ctest --output-on-failure -E .+colmap_.*

- name: Cleanup compiler cache
run: |
set -x
ccache --show-stats --verbose
ccache --evict-older-than 1d
ccache --show-stats --verbose

echo "Size of ctcache before: $(du -sh $CTCACHE_DIR)"
echo "Number of ctcache files before: $(find $CTCACHE_DIR | wc -l)"
# Delete cache older than 10 days.
find "$CTCACHE_DIR"/*/ -mtime +10 -print0 | xargs -0 rm -rf
echo "Size of ctcache after: $(du -sh $CTCACHE_DIR)"
echo "Number of ctcache files after: $(find $CTCACHE_DIR | wc -l)"''
echo "Number of ctcache files after: $(find $CTCACHE_DIR | wc -l)"
53 changes: 32 additions & 21 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,6 @@ jobs:
strategy:
matrix:
config: [
{
os: windows-2019,
cmakeBuildType: Release,
cudaEnabled: false,
testsEnabled: true,
exportPackage: false,
},
{
os: windows-2022,
cmakeBuildType: Release,
Expand All @@ -44,18 +37,35 @@ jobs:
COMPILER_CACHE_DIR: ${{ github.workspace }}/compiler-cache
CCACHE_DIR: ${{ github.workspace }}/compiler-cache/ccache
CCACHE_BASEDIR: ${{ github.workspace }}
VCPKG_COMMIT_ID: e01906b2ba7e645a76ee021a19de616edc98d29f
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_COMMIT_ID: bc3512a509f9d29b37346a7e7e929f9a26e66c7e
GLOG_v: 1
GLOG_logtostderr: 1

steps:
- uses: actions/checkout@v4

- name: Export GitHub Actions cache env
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');

# We define the vcpkg binary sources using separate variables for read and
# write operations:
# * Read sources are defined as inline. These can be read by anyone and,
# in particular, pull requests from forks. Unfortunately, we cannot
# define these as action environment variables. See:
# https://github.com/orgs/community/discussions/44322
# * Write sources are defined as action secret variables. These cannot be
# read by pull requests from forks but only from pull requests from
# within the target repository (i.e., created by a repository owner).
# This protects us from malicious actors accessing our secrets and
# gaining write access to our binary cache. For more information, see:
# https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
- name: Setup vcpkg binary cache
shell: pwsh
run: |
# !!!PLEASE!!! be nice and don't use this cache for your own purposes. This is only meant for CI purposes in this repository.
$VCPKG_BINARY_SOURCES = "clear;x-azblob,https://colmap.blob.core.windows.net/github-actions-cache,sp=r&st=2024-12-10T17:29:32Z&se=2030-12-31T01:29:32Z&spr=https&sv=2022-11-02&sr=c&sig=bWydkilTMjRn3LHKTxLgdWrFpV4h%2Finzoe9QCOcPpYQ%3D,read"
if ("${{ secrets.VCPKG_BINARY_CACHE_AZBLOB_URL }}") {
# The secrets are only accessible in runs triggered from within the target repository and not forks.
$VCPKG_BINARY_SOURCES += ";x-azblob,${{ secrets.VCPKG_BINARY_CACHE_AZBLOB_URL }},${{ secrets.VCPKG_BINARY_CACHE_AZBLOB_SAS }},write"
}
echo "VCPKG_BINARY_SOURCES=${VCPKG_BINARY_SOURCES}" >> "${env:GITHUB_ENV}"
- name: Compiler cache
uses: actions/cache@v4
Expand All @@ -70,11 +80,9 @@ jobs:
run: |
New-Item -ItemType Directory -Force -Path "${{ env.CCACHE_DIR }}"
echo "${{ env.COMPILER_CACHE_DIR }}/bin" | Out-File -Encoding utf8 -Append -FilePath $env:GITHUB_PATH
if (Test-Path -PathType Leaf "${{ env.COMPILER_CACHE_DIR }}/bin/ccache.exe") {
exit
}
.github/workflows/install-ccache.ps1 -Destination "${{ env.COMPILER_CACHE_DIR }}/bin"
- name: Install CUDA
Expand All @@ -86,9 +94,6 @@ jobs:
sub-packages: '["nvcc", "nvtx", "cudart", "curand", "curand_dev", "nvrtc_dev"]'
method: 'network'

- name: Install CMake and Ninja
uses: lukka/get-cmake@latest

- name: Setup vcpkg
shell: pwsh
run: |
Expand All @@ -99,6 +104,12 @@ jobs:
git reset --hard ${{ env.VCPKG_COMMIT_ID }}
./bootstrap-vcpkg.bat
- name: Install CMake and Ninja
uses: lukka/get-cmake@latest
with:
cmakeVersion: "3.31.0"
ninjaVersion: "1.12.1"

- name: Configure and build
shell: pwsh
run: |
Expand Down
26 changes: 3 additions & 23 deletions scripts/format/clang_format.sh → scripts/format/c++.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,9 @@

# This script applies clang-format to the whole repository.

# Find clang-format
tools='
clang-format
'

clang_format=''
for tool in ${tools}; do
if type -p "${tool}" > /dev/null; then
clang_format=$tool
break
fi
done

if [ -z "$clang_format" ]; then
echo "Could not locate clang-format"
exit 1
fi
echo "Found clang-format: $(which ${clang_format})"

# Check version
version_string=$($clang_format --version | sed -E 's/^.*(\d+\.\d+\.\d+-.*).*$/\1/')
expected_version_string='14.0.0'
version_string=$(clang-format --version | sed -E 's/^.*(\d+\.\d+\.\d+-.*).*$/\1/')
expected_version_string='19.1.0'
if [[ "$version_string" =~ "$expected_version_string" ]]; then
echo "clang-format version '$version_string' matches '$expected_version_string'"
else
Expand All @@ -40,5 +21,4 @@ all_files=$( \
num_files=$(echo $all_files | wc -w)
echo "Formatting ${num_files} files"

# Run clang-format
${clang_format} -i $all_files
clang-format -i $all_files
Loading