Create batch file to call buck2.py #7119
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build, upload, and tag `buck2` | |
on: | |
push: | |
branches: | |
- main | |
jobs: | |
get_prelude_hash: | |
name: Get the latest prelude hash | |
runs-on: ubuntu-latest | |
outputs: | |
prelude_hash: ${{ steps.get_latest_prelude_hash.outputs.prelude_hash }} | |
steps: | |
- name: Shallow clone buck2-prelude | |
run: git clone --depth=1 https://github.com/facebook/buck2-prelude | |
- name: Get latest commit hash into prelude_hash | |
id: get_latest_prelude_hash | |
run: | | |
mkdir artifacts/ | |
cd buck2-prelude/ | |
git rev-parse HEAD > ../artifacts/prelude_hash | |
echo "prelude_hash=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" | |
- name: Upload prelude_hash | |
uses: actions/upload-artifact@v4 | |
with: | |
path: artifacts/prelude_hash | |
name: prelude_hash | |
build: | |
needs: | |
- get_prelude_hash | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- os: 'ubuntu-22.04' | |
triple: 'aarch64-unknown-linux-gnu' | |
cross: true | |
- os: 'ubuntu-22.04' | |
triple: 'aarch64-unknown-linux-musl' | |
cross: true | |
- os: 'ubuntu-22.04' | |
triple: 'x86_64-unknown-linux-gnu' | |
- os: 'ubuntu-22.04' | |
triple: 'x86_64-unknown-linux-musl' | |
cross: true | |
- os: 'macos-12' | |
triple: 'aarch64-apple-darwin' | |
cross: true | |
- os: 'macos-12' | |
triple: 'x86_64-apple-darwin' | |
- os: 'windows-2022' | |
triple: 'x86_64-pc-windows-msvc' | |
is_windows: true | |
runs-on: ${{ matrix.target.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: SebRollen/[email protected] | |
id: read_rust_toolchain | |
with: | |
file: 'rust-toolchain' | |
field: 'toolchain.channel' | |
- uses: dtolnay/rust-toolchain@v1 | |
with: | |
toolchain: ${{ steps.read_rust_toolchain.outputs.value }} | |
targets: ${{ matrix.target.triple }} | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
prefix-key: buck2-upload | |
key: ${{ matrix.target.triple }} | |
- uses: actions-rs/[email protected] | |
if: matrix.target.cross | |
with: | |
crate: cross | |
version: latest | |
- name: Set variables | |
id: set_variables | |
shell: bash | |
run: | | |
if [ -n "${{ matrix.target.is_windows }}" ]; then | |
echo "buck2_out=target/${{ matrix.target.triple }}/release/buck2.exe" >> "$GITHUB_OUTPUT" | |
echo "buck2_zst=artifacts/buck2-${{ matrix.target.triple }}.exe.zst" >> "$GITHUB_OUTPUT" | |
echo "buck2_rust_project_out=target/${{ matrix.target.triple }}/release/rust-project.exe" >> "$GITHUB_OUTPUT" | |
echo "buck2_rust_project_zst=artifacts/rust-project-${{ matrix.target.triple }}.exe.zst" >> "$GITHUB_OUTPUT" | |
else | |
echo "buck2_out=target/${{ matrix.target.triple }}/release/buck2" >> "$GITHUB_OUTPUT" | |
echo "buck2_zst=artifacts/buck2-${{ matrix.target.triple }}.zst" >> "$GITHUB_OUTPUT" | |
echo "buck2_rust_project_out=target/${{ matrix.target.triple }}/release/rust-project" >> "$GITHUB_OUTPUT" | |
echo "buck2_rust_project_zst=artifacts/rust-project-${{ matrix.target.triple }}.zst" >> "$GITHUB_OUTPUT" | |
fi | |
- name: Build | |
shell: bash | |
env: | |
RUSTFLAGS: "-C strip=debuginfo -C codegen-units=1" | |
run: | | |
# aarch64-linux builds need JEMALLOC_SYS_WITH_LG_PAGE=16 | |
# this is for e.g. linux running on apple silicon with native 16k pages | |
if [[ "${{ matrix.target.triple }}" == aarch64-unknown-linux* ]]; then | |
export JEMALLOC_SYS_WITH_LG_PAGE=16 | |
fi | |
if [ -n "${{ matrix.target.cross }}" ]; then | |
CARGO=cross | |
else | |
CARGO=cargo | |
fi | |
$CARGO build --release --bin buck2 --bin rust-project --target ${{ matrix.target.triple }} | |
- name: Sanity check with examples/with_prelude | |
if: ${{ !matrix.target.cross }} | |
shell: bash | |
run: | | |
BUCK2="$(pwd)/${{ steps.set_variables.outputs.buck2_out }}" | |
cd examples/with_prelude | |
"$BUCK2" build //rust/... //cpp/... //python/... -v=2 | |
- name: Move binary to artifacts/ | |
shell: bash | |
run: | | |
mkdir artifacts | |
zstd -z ${{ steps.set_variables.outputs.buck2_out }} -o ${{ steps.set_variables.outputs.buck2_zst }} | |
zstd -z ${{ steps.set_variables.outputs.buck2_rust_project_out }} -o ${{ steps.set_variables.outputs.buck2_rust_project_zst }} | |
- name: Upload | |
uses: actions/upload-artifact@v4 | |
with: | |
name: buck2-${{ matrix.target.triple }} | |
path: artifacts/ | |
release_latest: | |
name: Release `latest` tag | |
needs: | |
- build | |
- get_prelude_hash | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# Publish a new tag and upload all aritfacts from `build` and `get_prelude_hash` | |
- uses: ./.github/actions/publish_tag | |
with: | |
tag: "latest" | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
check_for_bi_monthly_release: | |
name: Check if there's a release for this half of the month already | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
outputs: | |
tag: ${{ steps.check_if_we_need_to_tag.outputs.new_tag }} | |
steps: | |
- id: get_date | |
name: Store date information so we stay consistent between the steps | |
run: | | |
month=$(date +%Y-%m) | |
# The math below uses the day number "XX" as a number, but if it has a leading 0 and the | |
# second digit is larger than 7 this fails as it parses as an octal, so we use `sed` to fix: | |
day=$(date +%d | sed 's/^0*//') | |
tag=$(date +%Y-%m-%d) | |
echo "month=$month" >> "$GITHUB_OUTPUT" | |
echo "day=$day" >> "$GITHUB_OUTPUT" | |
echo "tag=$tag" >> "$GITHUB_OUTPUT" | |
cat "$GITHUB_OUTPUT" | |
- id: get_tags_count | |
name: Count the number of tags already published for this month | |
run: | | |
# GITHUB_REPOSITORY is used to allow this action to work on forks | |
url="https://api.github.com/repos/$GITHUB_REPOSITORY/tags" | |
curl --retry 5 -fsSL "$url" -o tags.txt | |
tags=$(cat tags.txt | jq -r ".[].name") | |
tags_count=$(echo "$tags" | grep -c "${{ steps.get_date.outputs.month }}" || true) | |
echo "tags_count=$tags_count" >> "$GITHUB_OUTPUT" | |
cat "$GITHUB_OUTPUT" | |
- id: check_if_we_need_to_tag | |
name: Check if we should tag | |
run: | | |
tags_count=${{ steps.get_tags_count.outputs.tags_count }} | |
day=${{ steps.get_date.outputs.day }} | |
tag=${{ steps.get_date.outputs.tag }} | |
# If we're in the first half of the month, check if there are no tags for this month yet | |
if (( day < 15 && tags_count < 1 )); then echo "new_tag=${tag}" >> "$GITHUB_OUTPUT"; fi; | |
# Otherwise, tag if the count is less than 2. | |
if (( day >= 15 && tags_count < 2 )); then echo "new_tag=${tag}" >> "$GITHUB_OUTPUT"; fi; | |
cat $GITHUB_OUTPUT | |
release_bi_monthly: | |
name: Release bi-monthly tag | |
needs: | |
- build | |
- check_for_bi_monthly_release | |
runs-on: ubuntu-latest | |
# Only perform this action if check_for_bi_monthly_release set a tag output | |
if: ${{ needs.check_for_bi_monthly_release.outputs.tag }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# Publish a new tag and upload all aritfacts from `build` and `get_prelude_hash` | |
- uses: ./.github/actions/publish_tag | |
with: | |
tag: ${{ needs.check_for_bi_monthly_release.outputs.tag }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: facebook/dotslash-publish-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
config: .github/dotslash-config.json | |
tag: ${{ needs.check_for_bi_monthly_release.outputs.tag }} | |
build_docs_job: | |
name: Publish buck2.build | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Download Buck2 | |
uses: actions/download-artifact@v4 | |
with: | |
name: buck2-x86_64-unknown-linux-gnu | |
path: artifacts | |
- name: Decompress Buck2 | |
run: | | |
zstd -d artifacts/buck2-x86_64-unknown-linux-gnu.zst -o artifacts/buck2-release | |
chmod +x artifacts/buck2-release | |
- name: Install dependencies | |
run: | | |
sudo apt-get install -y yarn | |
id: build | |
- name: Build the Website | |
run: | | |
cd website | |
yarn | |
BUCK2_BIN="$GITHUB_WORKSPACE/artifacts/buck2-release" yarn build_prebuilt | |
- name: Deploy | |
uses: JamesIves/github-pages-deploy-action@releases/v4 | |
with: | |
branch: gh-pages # The branch the action should deploy to. | |
folder: website/build # The folder the action should deploy. | |
single-commit: true # Discard history for the gh-pages branch. |