Skip to content

Commit 39ed1eb

Browse files
committed
ci: Support concurrent workflow runs
1 parent 841cf01 commit 39ed1eb

3 files changed

Lines changed: 38 additions & 14 deletions

File tree

.github/scripts/setup-chipyard.sh

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,34 @@ export MAKEFLAGS="-j"
99

1010
cd "${CHIPYARD_DIR}"
1111

12+
if [[ -z "${CONDA_ENV_DIR:-}" ]]; then
13+
echo "error: CONDA_ENV_DIR must be set" >&2
14+
exit 1
15+
fi
16+
17+
mkdir -p "$(dirname "${CONDA_ENV_DIR}")"
18+
19+
cat > "${CHIPYARD_DIR}/env.sh" <<EOF
20+
# line auto-generated by .github/scripts/setup-chipyard.sh
21+
if ! type conda >& /dev/null; then
22+
echo "::ERROR:: you must have conda in your environment first"
23+
return 1
24+
fi
25+
26+
source \$(conda info --base)/etc/profile.d/conda.sh
27+
conda activate "${CONDA_ENV_DIR}"
28+
source "${CHIPYARD_DIR}/scripts/fix-open-files.sh"
29+
EOF
30+
1231
if [[ "${CACHE_HIT}" == "true" ]]; then
1332
echo "[CI] Cache hit! Skipping conda and toolchain steps"
14-
export RISCV="${CHIPYARD_DIR}/.conda-env/riscv-tools"
33+
export RISCV="${CONDA_ENV_DIR}/riscv-tools"
1534
[ -d "${RISCV}" ] || ( echo "error: ${RISCV} does not exist!" && exit 1 )
1635
source $(conda info --base)/etc/profile.d/conda.sh
17-
conda activate "${CHIPYARD_DIR}/.conda-env"
18-
./build-setup.sh riscv-tools \
36+
conda activate "${CONDA_ENV_DIR}"
37+
./build-setup.sh --conda-env-name "${CONDA_ENV_DIR}" riscv-tools \
1938
--skip-conda --skip-toolchain --skip-ctags --skip-precompile --skip-firesim --skip-marshal --skip-circt
2039
else
21-
./build-setup.sh riscv-tools \
40+
./build-setup.sh --conda-env-name "${CONDA_ENV_DIR}" riscv-tools \
2241
--skip-ctags --skip-precompile --skip-firesim --skip-marshal
2342
fi

.github/workflows/ci.yml

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ defaults:
1111

1212
env:
1313
CHIPYARD_RELPATH: chipyard-work
14-
# need to be persistent cross-action
15-
CHIPYARD_DIR: "/scratch/buildbot/radiance-ci-shared/chipyard"
14+
CHIPYARD_RUN_ROOT: "/scratch/buildbot/radiance-ci-runs/${{ github.run_id }}-${{ github.run_attempt }}"
15+
CHIPYARD_DIR: "/scratch/buildbot/radiance-ci-runs/${{ github.run_id }}-${{ github.run_attempt }}/chipyard"
16+
CONDA_CACHE_ROOT: "/scratch/buildbot/radiance-ci-shared/conda"
1617
# flip to force-reset cache
1718
CACHE_NUMBER: 0
1819
JAVA_HEAP_SIZE: "64G"
@@ -43,12 +44,17 @@ jobs:
4344
submodules: recursive
4445

4546
- name: Checkout Chipyard
47+
id: checkout-chipyard
4648
run: |
47-
[ -d "${CHIPYARD_DIR}" ] && echo "${CHIPYARD_DIR} already exists, aborting" && exit 1
48-
mkdir -p "${CHIPYARD_DIR}"
49+
mkdir -p "${CHIPYARD_RUN_ROOT}"
4950
git clone --depth 1 --branch graphics "https://github.com/ucb-bar/chipyard.git" "${CHIPYARD_DIR}"
5051
cd "${CHIPYARD_DIR}"
51-
echo "CHIPYARD_HASH=$(git rev-parse HEAD)" >> "${GITHUB_ENV}"
52+
CHIPYARD_HASH="$(git rev-parse HEAD)"
53+
CONDA_ENV_DIR="${CONDA_CACHE_ROOT}/chipyard-${CHIPYARD_HASH}/.conda-env"
54+
echo "CHIPYARD_HASH=${CHIPYARD_HASH}" >> "${GITHUB_ENV}"
55+
echo "CONDA_ENV_DIR=${CONDA_ENV_DIR}" >> "${GITHUB_ENV}"
56+
echo "chipyard_hash=${CHIPYARD_HASH}" >> "${GITHUB_OUTPUT}"
57+
echo "conda_env_dir=${CONDA_ENV_DIR}" >> "${GITHUB_OUTPUT}"
5258
# for caching
5359
ln -sf "${CHIPYARD_DIR}" "${GITHUB_WORKSPACE}/${CHIPYARD_RELPATH}"
5460
@@ -78,9 +84,8 @@ jobs:
7884
uses: actions/cache@v5
7985
with:
8086
path: |
81-
${{ env.CHIPYARD_DIR }}/.conda-env
82-
${{ env.CHIPYARD_RELPATH }}/env.sh
83-
key: chipyard-${{ env.CHIPYARD_HASH }}-${{ runner.os }}-${{ runner.arch }}-${{ env.CACHE_NUMBER }}
87+
${{ steps.checkout-chipyard.outputs.conda_env_dir }}
88+
key: chipyard-${{ steps.checkout-chipyard.outputs.chipyard_hash }}-${{ runner.os }}-${{ runner.arch }}-${{ env.CACHE_NUMBER }}
8489

8590
- name: Setup Chipyard
8691
run: |
@@ -234,4 +239,4 @@ jobs:
234239
- name: Cleanup workspace, chipyard and conda
235240
run: |
236241
[ -d "${{ github.workspace }}" ] && rm -rf "${{ github.workspace }}"
237-
[ -d "${CHIPYARD_DIR}" ] && rm -rf "${CHIPYARD_DIR}"
242+
[ -d "${CHIPYARD_RUN_ROOT}" ] && rm -rf "${CHIPYARD_RUN_ROOT}"

0 commit comments

Comments
 (0)