mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-10-01 01:36:09 -04:00
183 lines
6.6 KiB
YAML
183 lines
6.6 KiB
YAML
name: Setup bazel and Nix
|
|
description: Setup Bazel and Nix for CI builds and tests
|
|
|
|
inputs:
|
|
useCache:
|
|
description: "Cache Bazel artifacts. Use 'true' to enable with rw, 'readonly' to download, 'log' to disable cache but upload logs, and 'false' to disable."
|
|
default: "false"
|
|
required: true
|
|
buildBuddyApiKey:
|
|
description: "BuildBuddy API key for caching Bazel artifacts"
|
|
required: false
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- name: Check inputs
|
|
id: check_inputs
|
|
shell: bash
|
|
run: |
|
|
echo "::group::Check inputs"
|
|
if [[ "${{ inputs.useCache }}" != "true" && "${{ inputs.useCache }}" != "readonly" && "${{ inputs.useCache }}" != "logs" && "${{ inputs.useCache }}" != "false" ]]; then
|
|
echo "Invalid value for 'useCache' input: '${{ inputs.useCache }}'. Must be 'true', 'readonly', or 'false'."
|
|
exit 1
|
|
fi
|
|
if [[ "${{ inputs.useCache }}" == "true" || "${{ inputs.useCache }}" == "readonly" || "${{ inputs.useCache }}" == "logs" ]] && [[ -z "${{ inputs.buildBuddyApiKey }}" ]]; then
|
|
echo "BuildBuddy API key is required when cache is enabled."
|
|
exit 1
|
|
fi
|
|
if command -v nix; then
|
|
echo "nixPreinstalled=true" | tee -a "$GITHUB_OUTPUT"
|
|
else
|
|
echo "nixPreinstalled=false" | tee -a "$GITHUB_OUTPUT"
|
|
fi
|
|
if command -v bazel; then
|
|
echo "bazelPreinstalled=true" | tee -a "$GITHUB_OUTPUT"
|
|
else
|
|
echo "bazelPreinstalled=false" | tee -a "$GITHUB_OUTPUT"
|
|
fi
|
|
if [[ -f /etc/NIXOS ]]; then
|
|
echo "nixOS=true" | tee -a "$GITHUB_OUTPUT"
|
|
else
|
|
echo "nixOS=false" | tee -a "$GITHUB_OUTPUT"
|
|
fi
|
|
if [[ "$RUNNER_OS" == "Linux" ]]; then
|
|
echo "os=linux" | tee -a "$GITHUB_OUTPUT"
|
|
elif [[ "$RUNNER_OS" == "Windows" ]]; then
|
|
echo "os=windows" | tee -a "$GITHUB_OUTPUT"
|
|
elif [[ "$RUNNER_OS" == "macOS" ]]; then
|
|
echo "os=darwin" | tee -a "$GITHUB_OUTPUT"
|
|
else
|
|
echo "$RUNNER_OS not supported"
|
|
exit 1
|
|
fi
|
|
if [[ "$RUNNER_ARCH" == "X64" ]]; then
|
|
echo "arch=amd64" | tee -a "$GITHUB_OUTPUT"
|
|
elif [[ "$RUNNER_ARCH" == "ARM64" ]]; then
|
|
echo "arch=arm64" | tee -a "$GITHUB_OUTPUT"
|
|
else
|
|
echo "$RUNNER_ARCH not supported"
|
|
exit 1
|
|
fi
|
|
echo "::endgroup::"
|
|
|
|
- name: Install nix
|
|
if: steps.check_inputs.outputs.nixPreinstalled == 'false'
|
|
uses: cachix/install-nix-action@6ed004b9ccb68dbc28e7c85bee15fa93dbd214ac # v22
|
|
|
|
# - uses: cachix/cachix-action@6a9a34cdd93d0ae4b4b59fd678660efb08109f2f # v12
|
|
# with:
|
|
# name: katexochen
|
|
# extraPullNames: nix-community
|
|
|
|
- name: Install Bazelisk
|
|
if: steps.check_inputs.outputs.bazelPreinstalled == 'false' && steps.check_inputs.outputs.nixOS == 'false'
|
|
shell: bash
|
|
env:
|
|
OS: ${{ steps.check_inputs.outputs.os }}
|
|
ARCH: ${{ steps.check_inputs.outputs.arch }}
|
|
run: |
|
|
echo "::group::Install Bazelisk"
|
|
curl -fsSLo /usr/local/bin/bazel "https://github.com/bazelbuild/bazelisk/releases/download/v1.18.0/bazelisk-${OS}-${ARCH}"
|
|
chmod +x /usr/local/bin/bazel
|
|
echo "::endgroup::"
|
|
|
|
- name: Free up space (Ubuntu)
|
|
shell: bash
|
|
if: startsWith(runner.name, 'GitHub Actions') && runner.os == 'Linux'
|
|
run: |
|
|
echo "::group::Free up space (Ubuntu)"
|
|
echo "Available storage (before):"
|
|
df -h
|
|
|
|
sudo apt-get update || true
|
|
sudo apt-get remove -y '^dotnet-.*' || true
|
|
sudo apt-get remove -y '^llvm-.*' || true
|
|
sudo apt-get remove -y 'php.*' || true
|
|
sudo apt-get remove -y '^mongodb-.*' || true
|
|
sudo apt-get remove -y '^mysql-.*' || true
|
|
sudo rm -rf /usr/share/dotnet
|
|
sudo rm -rf /usr/local/lib/android
|
|
sudo rm -rf /opt/ghc
|
|
sudo rm -rf /opt/hostedtoolcache/CodeQL
|
|
sudo docker image prune --all --force
|
|
sudo apt-get autoremove -y || true
|
|
sudo apt-get clean || true
|
|
|
|
echo "Available storage (after):"
|
|
df -h
|
|
echo "::endgroup::"
|
|
|
|
- name: Configure Bazel (general)
|
|
shell: bash
|
|
env:
|
|
WORKSPACE: ${{ github.workspace }}
|
|
run: |
|
|
echo "::group::Configure Bazel"
|
|
cat <<EOF >> "${WORKSPACE}/.bazeloverwriterc"
|
|
import %workspace%/bazel/bazelrc/ci.bazelrc
|
|
EOF
|
|
echo "::endgroup::"
|
|
|
|
- name: Configure Bazel (rw)
|
|
if: inputs.useCache == 'true' || inputs.useCache == 'readonly'
|
|
shell: bash
|
|
env:
|
|
BUILDBUDDY_ORG_API_KEY: ${{ inputs.buildBuddyApiKey }}
|
|
WORKSPACE: ${{ github.workspace }}
|
|
run: |
|
|
echo "::group::Configure Bazel"
|
|
cat <<EOF >> "${WORKSPACE}/.bazeloverwriterc"
|
|
common --bes_results_url=https://app.buildbuddy.io/invocation/
|
|
common --bes_backend=grpcs://remote.buildbuddy.io
|
|
common --remote_cache=grpcs://remote.buildbuddy.io
|
|
common --remote_header=x-buildbuddy-api-key=${BUILDBUDDY_ORG_API_KEY}
|
|
cquery --bes_results_url=
|
|
cquery --bes_backend=
|
|
cquery --remote_cache=
|
|
query --bes_results_url=
|
|
query --bes_backend=
|
|
query --remote_cache=
|
|
EOF
|
|
echo "::endgroup::"
|
|
|
|
- name: Configure Bazel (readonly)
|
|
if: inputs.useCache == 'readonly'
|
|
shell: bash
|
|
env:
|
|
WORKSPACE: ${{ github.workspace }}
|
|
run: |
|
|
echo "::group::Configure Bazel (readonly)"
|
|
echo "common --remote_upload_local_results=false" >> "${WORKSPACE}/.bazeloverwriterc"
|
|
echo "::endgroup::"
|
|
|
|
- name: Configure Bazel (logs)
|
|
if: inputs.useCache == 'logs'
|
|
shell: bash
|
|
env:
|
|
BUILDBUDDY_ORG_API_KEY: ${{ inputs.buildBuddyApiKey }}
|
|
WORKSPACE: ${{ github.workspace }}
|
|
run: |
|
|
echo "::group::Configure Bazel"
|
|
cat <<EOF >> "${WORKSPACE}/.bazeloverwriterc"
|
|
common --bes_results_url=https://app.buildbuddy.io/invocation/
|
|
common --bes_backend=grpcs://remote.buildbuddy.io
|
|
common --remote_header=x-buildbuddy-api-key=${BUILDBUDDY_ORG_API_KEY}
|
|
cquery --bes_results_url=
|
|
cquery --bes_backend=
|
|
query --bes_results_url=
|
|
query --bes_backend=
|
|
EOF
|
|
echo "::endgroup::"
|
|
|
|
- name: Disable disk cache on GitHub Actions runners
|
|
if: startsWith(runner.name , 'GitHub Actions')
|
|
shell: bash
|
|
env:
|
|
WORKSPACE: ${{ github.workspace }}
|
|
run: |
|
|
echo "::group::Configure Bazel (disk cache)"
|
|
echo "common --disk_cache=" >> "${WORKSPACE}/.bazeloverwriterc"
|
|
echo "common --repository_cache=" >> "${WORKSPACE}/.bazeloverwriterc"
|
|
echo "::endgroup::"
|