mirror of
https://github.com/nestriness/cdc-file-transfer.git
synced 2026-01-30 12:25:35 +02:00
Uses a bazel --disk_cache to cache build outputs between builds. Bazel also has a local cache, e.g. in ~/.cache/bazel/_bazel_$USER/cache, but that one can't be used as it won't reuse data across checkouts. A disk cache is like a remote cache, except that it's on the local disk. Github first looks for a cache with the given exact key in the current branch, then in the main branch. If there's a cache hit, the cache isn't updated (they're read-only!). To prevent that caches become stale, they are timestamped using the current year and month, so that the cache is force-renewed every month. Bazel disk caches also just grow, so this technique prevents that the cache grows indefinitely, eventually causing cache trashing.
85 lines
2.8 KiB
YAML
85 lines
2.8 KiB
YAML
name: Build & Test
|
|
|
|
# Run when something is pushed to main or when there's action on a pull request.
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
|
|
# Cancel running workflow if a pull request is modified. Note that head_ref is
|
|
# undefined for pushes to main. Use run_id as fallback. This is unique for each
|
|
# run, so runs for pushes to main are never cancelled.
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
Build-And-Test-Linux:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Initialize submodules
|
|
run: git submodule update --init --recursive
|
|
|
|
- name: Create timestamp
|
|
run: |
|
|
printf -v date '%(%Y-%m)T' -1
|
|
echo "date=$date" >> $GITHUB_ENV
|
|
|
|
- name: Restore build cache
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: bazel-cache
|
|
key: ${{ runner.os }}-bazel-cache-${{ env.date }}
|
|
|
|
- name: Build (fastbuild)
|
|
run: bazel build --config=linux --disk_cache=bazel-cache -- //... -//third_party/...
|
|
|
|
# Skip file_finder_test: The test works when file_finder_test is run
|
|
# directly, but not through bazel test. The reason is, bazel test
|
|
# creates symlinks of test files, but the finder ignores symlinks.
|
|
# Also run tests sequentially since some tests write to a common tmp dir.
|
|
- name: Test (fastbuild)
|
|
run: bazel test --config=linux --disk_cache=bazel-cache --test_output=errors --local_test_jobs=1 -- //... -//third_party/... -//cdc_rsync_server:file_finder_test
|
|
|
|
Build-And-Test-Windows:
|
|
runs-on: windows-2019
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Initialize submodules
|
|
run: git submodule update --init --recursive
|
|
|
|
- name: Create timestamp
|
|
run: |
|
|
$date = Get-Date -Format "yyyy-MM"
|
|
echo "date=$date" >> $GITHUB_ENV
|
|
|
|
- name: Restore build cache
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: bazel-cache
|
|
key: ${{ runner.os }}-bazel-cache-${{ env.date }}
|
|
|
|
- name: Build
|
|
run: bazel build --config=windows --disk_cache=bazel-cache //cdc_rsync //cdc_stream //tests_common //tests_cdc_stream //tests_cdc_rsync
|
|
|
|
- name: Test
|
|
run: |
|
|
bazel-bin\tests_common\tests_common.exe
|
|
bazel-bin\tests_cdc_stream\tests_cdc_stream.exe
|
|
bazel-bin\tests_cdc_rsync\tests_cdc_rsync.exe
|
|
bazel test --config=windows --disk_cache=bazel-cache --test_output=errors --local_test_jobs=1 `
|
|
//cdc_fuse_fs/... `
|
|
//cdc_rsync/... `
|
|
//cdc_rsync/base/... `
|
|
//cdc_rsync_server/... `
|
|
//cdc_stream/... `
|
|
//common/... `
|
|
//data_store/... `
|
|
//fastcdc/... `
|
|
//manifest/... `
|
|
//metrics/...
|