Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: use prebuilt librocksdb in github actions #2316

Merged
merged 28 commits into from
Nov 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6e95aa0
build(github): move all tests to free runners
lklimek Nov 6, 2024
ca00d6e
feat(github): action to install librocksdb
lklimek Nov 6, 2024
25abfd6
fix: add checkout
lklimek Nov 6, 2024
dafc311
fix: don't rebuild cache every time
lklimek Nov 6, 2024
9b093df
build(docker): Prebuild dependencies image
lklimek Nov 6, 2024
39eb45c
chore: fix docker caching job
lklimek Nov 6, 2024
249f8b5
fix(docker): rm fails
lklimek Nov 6, 2024
488a7ae
feat(github): use prebuilt rocksdb everywhere
lklimek Nov 6, 2024
8ccb067
chore: remove librocksdb from formatting step
lklimek Nov 6, 2024
e608408
build(docker): move tests to amd64
lklimek Nov 6, 2024
eafa040
build(docker): fix rocksdb build
lklimek Nov 6, 2024
98f0af6
Merge branch 'v1.6-dev' into build/optimize-memory
lklimek Nov 6, 2024
49ee181
Merge remote-tracking branch 'origin/build/optimize-memory' into buil…
lklimek Nov 6, 2024
9a57f6f
build: adjust -j flag
lklimek Nov 6, 2024
355e344
chore(github): remove docker-deps from tests.yml, we will trust layer…
lklimek Nov 6, 2024
0239693
build: add job to prebuild deps on push to master
lklimek Nov 6, 2024
0a73edc
chore: self-review
lklimek Nov 6, 2024
8318995
chore: librocksdb cached in s3 instead of gh cache
lklimek Nov 8, 2024
97bcd47
chore: rename rust-deps step
lklimek Nov 8, 2024
40e8ad5
chore: fix cache key
lklimek Nov 8, 2024
9b8e0c2
chore: remove weekly rebuild
lklimek Nov 8, 2024
d3b6c8a
Merge remote-tracking branch 'origin/v1.6-dev' into build/optimize-me…
lklimek Nov 8, 2024
fcd3d6a
chore: set aws region and secrets
lklimek Nov 8, 2024
169a655
chore: move docker changes to another pr
lklimek Nov 8, 2024
c939f44
chore: fix
lklimek Nov 8, 2024
dd18c7d
chore: rebuild cached deps
lklimek Nov 8, 2024
39e9c41
chore: switch to ubuntu 24.04
lklimek Nov 8, 2024
691afb2
chore: actions/checkout v4
lklimek Nov 8, 2024
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
55 changes: 55 additions & 0 deletions .github/actions/librocksdb/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
# This action builds and caches librocksdb. If we find that this solution consumes too much time, we can consider
# prebuilding librocksdb outside of the pipeline (eg. in the grovedb release process), publish as an artifact, and
# download it in the pipeline.
name: "librocksdb"
description: "Build and install librocksdb"
inputs:
version:
description: RocksDB version, eg. "8.10.2"
required: false
default: "8.10.2"
bucket:
description: S3 bucket to use for caching
required: false
default: multi-runner-cache-x1xibo9c
force:
description: Force rebuild
required: false
default: "false"

runs:
using: composite
steps:
# Cache librocksdb using s3 bucket
- name: Restore cached librocksdb from S3
id: librocksdb-cache
uses: strophy/actions-cache@opendal-update
with:
Comment on lines +25 to +28
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Consider pinning the forked cache action to a specific commit.

Using a fork of actions/cache without pinning to a specific commit hash could lead to unexpected behavior if the fork is updated. Consider either:

  1. Using the official actions/cache@v4 with S3 support
  2. Pinning the current fork to a specific commit hash

Example:

-      uses: strophy/actions-cache@opendal-update
+      uses: strophy/actions-cache@commit-hash  # Replace with actual commit hash

Committable suggestion skipped: line range outside the PR's diff.

bucket: ${{ inputs.bucket }}
path: /opt/rocksdb
key: librocksdb/${{ inputs.version }}/${{ runner.os }}/${{ runner.arch }}
lklimek marked this conversation as resolved.
Show resolved Hide resolved

- if: ${{ steps.librocksdb-cache.outputs.cache-hit != 'true' || inputs.force == 'true' }}
shell: bash
name: Build librocksdb
run: |
set -ex
WORKDIR=/tmp/rocksdb-build
mkdir -p ${WORKDIR}/rocksdb
mkdir -p /opt/rocksdb/usr/local/lib/
pushd ${WORKDIR}/rocksdb
# building rocksdb
git clone https://github.com/facebook/rocksdb.git -b v${{ inputs.version }} --depth 1 .
make -j$(nproc) static_lib
make DESTDIR=/opt/rocksdb install-static
set +x
Comment on lines +36 to +47
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add cleanup and basic error handling to the build process.

The build process should clean up temporary files and include basic error handling:

 run: |
   set -ex
   WORKDIR=/tmp/rocksdb-build
+  trap 'rm -rf ${WORKDIR}' EXIT ERR
   mkdir -p ${WORKDIR}/rocksdb
   mkdir -p /opt/rocksdb/usr/local/lib/
   pushd ${WORKDIR}/rocksdb

   # building rocksdb
   git clone https://github.com/facebook/rocksdb.git -b v${{ inputs.version }} --depth 1 .
   make -j$(nproc) static_lib
   make DESTDIR=/opt/rocksdb install-static
+  
+  # Verify build success
+  if [[ ! -f /opt/rocksdb/usr/local/lib/librocksdb.a ]]; then
+    echo "Error: Static library not found after build"
+    exit 1
+  fi
   set +x
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
run: |
set -ex
WORKDIR=/tmp/rocksdb-build
mkdir -p ${WORKDIR}/rocksdb
mkdir -p /opt/rocksdb/usr/local/lib/
pushd ${WORKDIR}/rocksdb
# building rocksdb
git clone https://github.com/facebook/rocksdb.git -b v${{ inputs.version }} --depth 1 .
make -j$(nproc) static_lib
make DESTDIR=/opt/rocksdb install-static
set +x
run: |
set -ex
WORKDIR=/tmp/rocksdb-build
trap 'rm -rf ${WORKDIR}' EXIT ERR
mkdir -p ${WORKDIR}/rocksdb
mkdir -p /opt/rocksdb/usr/local/lib/
pushd ${WORKDIR}/rocksdb
# building rocksdb
git clone https://github.com/facebook/rocksdb.git -b v${{ inputs.version }} --depth 1 .
make -j$(nproc) static_lib
make DESTDIR=/opt/rocksdb install-static
# Verify build success
if [[ ! -f /opt/rocksdb/usr/local/lib/librocksdb.a ]]; then
echo "Error: Static library not found after build"
exit 1
fi
set +x

echo Done.
echo Configuration:
echo
echo "ROCKSDB_STATIC='/opt/rocksdb/usr/local/lib/librocksdb.a'"
echo "ROCKSDB_LIB_DIR='/opt/rocksdb/usr/local/lib'"
popd
23 changes: 23 additions & 0 deletions .github/workflows/cached.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
name: Rebuild cached dependencies

on:
workflow_dispatch:
jobs:
build-rust-deps:
name: Prebuild and cache some Rust dependencies
runs-on: ubuntu-24.04
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Precompile librocksdb
uses: ./.github/actions/librocksdb
with:
force: true
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
jobs:
build:
name: Deploy docs
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Checkout main
uses: actions/checkout@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/manage-runs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
jobs:
cancel-merged-or-closed-pr-runs:
name: Cancel runs for merged or closed PRs
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- uses: octokit/[email protected]
id: get_active_workflows
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
jobs:
pr-title:
name: PR title
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- name: Validate conventional PR title
uses: amannn/action-semantic-pull-request@v5
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ jobs:
publish-manifest:
name: Publish image tags
needs: build-image
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Download digests
uses: actions/download-artifact@v3
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -208,11 +208,11 @@ jobs:
matrix:
include:
- package_type: tarballs
os: ubuntu-22.04
os: ubuntu-24.04
- package_type: win
os: ubuntu-22.04
os: ubuntu-24.04
- package_type: deb
os: ubuntu-22.04
os: ubuntu-24.04
- package_type: macos
os: macos-14
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/tests-codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
jobs:
codeql:
name: Run Code QL
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
permissions:
actions: read
contents: read
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/tests-js-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ on:
jobs:
lint:
name: Linting
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
permissions:
id-token: write
contents: read
Expand Down Expand Up @@ -51,7 +51,7 @@ jobs:

test:
name: Tests
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
permissions:
id-token: write
contents: read
Expand Down
37 changes: 32 additions & 5 deletions .github/workflows/tests-rs-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ on:
lint-runner:
description: Runner for linting. Must be JSON valid string.
type: string
default: '"ubuntu-22.04"'
default: '"ubuntu-24.04"'
check-each-feature:
description: If true, try to build each individual feature for this crate
type: boolean
Expand Down Expand Up @@ -42,6 +42,9 @@ jobs:
with:
components: clippy

- name: Install librocksdb
uses: ./.github/actions/librocksdb

- uses: clechasseur/rs-clippy-check@v3
with:
args: --package ${{ inputs.package }} --all-features --locked -- --no-deps
Expand All @@ -50,10 +53,12 @@ jobs:
SCCACHE_BUCKET: multi-runner-cache-x1xibo9c
SCCACHE_REGION: ${{ secrets.AWS_REGION }}
SCCACHE_S3_KEY_PREFIX: ${{ runner.os }}/sccache/${{ runner.arch }}/linux-gnu
ROCKSDB_STATIC: "/opt/rocksdb/usr/local/lib/librocksdb.a"
ROCKSDB_LIB_DIR: "/opt/rocksdb/usr/local/lib"

formatting:
name: Formatting
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
- name: Check out repo
Expand All @@ -65,12 +70,19 @@ jobs:
components: rustfmt
cache: false

# This step doesn't need librocksdb, so we don't install it

- name: Check formatting
env:
RUSTC_WRAPPER: sccache
SCCACHE_BUCKET: multi-runner-cache-x1xibo9c
SCCACHE_REGION: ${{ secrets.AWS_REGION }}
SCCACHE_S3_KEY_PREFIX: ${{ runner.os }}/sccache/${{ runner.arch }}/linux-gnu
run: cargo fmt --check --package=${{ inputs.package }}

unused_deps:
name: Unused dependencies
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
permissions:
id-token: write
contents: read
Expand All @@ -89,6 +101,9 @@ jobs:
- name: Setup Rust
uses: ./.github/actions/rust

- name: Install librocksdb
uses: ./.github/actions/librocksdb

- name: Get crate ${{ inputs.package }} info
id: crate_info
uses: ./.github/actions/crate_info
Expand All @@ -102,12 +117,14 @@ jobs:
SCCACHE_BUCKET: multi-runner-cache-x1xibo9c
SCCACHE_REGION: ${{ secrets.AWS_REGION }}
SCCACHE_S3_KEY_PREFIX: ${{ runner.os }}/sccache/${{ runner.arch }}/linux-gnu
ROCKSDB_STATIC: "/opt/rocksdb/usr/local/lib/librocksdb.a"
ROCKSDB_LIB_DIR: "/opt/rocksdb/usr/local/lib"
with:
args: ${{ steps.crate_info.outputs.cargo_manifest_dir }}

detect_structure_changes:
name: Detect immutable structure changes
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
# FIXME: as we use `gh pr view` below, this check can only
# run on pull requests. We should find a way to run it
# when manual triggers are used.
Expand Down Expand Up @@ -184,13 +201,18 @@ jobs:
- name: Setup Rust
uses: ./.github/actions/rust

- name: Install librocksdb
uses: ./.github/actions/librocksdb

- name: Run tests
run: cargo test --package=${{ inputs.package }} --all-features --locked
env:
RUSTC_WRAPPER: sccache
SCCACHE_BUCKET: multi-runner-cache-x1xibo9c
SCCACHE_REGION: ${{ secrets.AWS_REGION }}
SCCACHE_S3_KEY_PREFIX: ${{ runner.os }}/sccache/${{ runner.arch }}/linux-gnu
ROCKSDB_STATIC: "/opt/rocksdb/usr/local/lib/librocksdb.a"
ROCKSDB_LIB_DIR: "/opt/rocksdb/usr/local/lib"

check_each_feature:
name: Check each feature
Expand All @@ -199,7 +221,7 @@ jobs:
if: ${{ inputs.check-each-feature }}
steps:
- name: Check out repo
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Configure AWS credentials and bucket region
uses: aws-actions/configure-aws-credentials@v4
Expand All @@ -211,6 +233,9 @@ jobs:
- name: Setup Rust
uses: ./.github/actions/rust

- name: Install librocksdb
uses: ./.github/actions/librocksdb

- name: Get crate ${{ runner.arch }} info
id: crate_info
uses: ./.github/actions/crate_info
Expand All @@ -223,6 +248,8 @@ jobs:
SCCACHE_BUCKET: multi-runner-cache-x1xibo9c
SCCACHE_REGION: ${{ secrets.AWS_REGION }}
SCCACHE_S3_KEY_PREFIX: ${{ runner.os }}/sccache/${{ runner.arch }}/linux-gnu
ROCKSDB_STATIC: "/opt/rocksdb/usr/local/lib/librocksdb.a"
ROCKSDB_LIB_DIR: "/opt/rocksdb/usr/local/lib"
run: |
echo Verify all features disabled
set -ex
Expand Down
40 changes: 32 additions & 8 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ name: Tests

on:
workflow_dispatch:
inputs:
rebuild-deps:
description: "Rebuild cached Rust dependencies"
required: false
default: "false"
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
branches:
Expand All @@ -16,13 +21,13 @@ jobs:
changes:
name: Determine changed packages
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || !github.event.pull_request.draft }}
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
lklimek marked this conversation as resolved.
Show resolved Hide resolved
outputs:
js-packages: ${{ steps.filter-js.outputs.changes }}
rs-packages: ${{ steps.filter-rs.outputs.changes }}
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0

Expand All @@ -36,6 +41,22 @@ jobs:
with:
filters: .github/package-filters/rs-packages.yml

build-rust-deps:
shumkov marked this conversation as resolved.
Show resolved Hide resolved
name: Prebuild and cache some Rust dependencies
runs-on: ubuntu-24.04
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Precompile librocksdb
uses: ./.github/actions/librocksdb

build-js:
name: Build JS packages
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || !github.event.pull_request.draft }}
Expand Down Expand Up @@ -69,6 +90,7 @@ jobs:
name: Rust packages
needs:
- changes
- build-rust-deps
secrets: inherit
strategy:
fail-fast: false
Expand All @@ -77,17 +99,19 @@ jobs:
uses: ./.github/workflows/tests-rs-package.yml
with:
package: ${{ matrix.rs-package }}
# lint-runner: ${{ contains(fromJSON('["drive-abci", "drive"]'), matrix.rs-package) && '[ "self-hosted", "linux", "arm64", "ubuntu-platform" ]' || '"ubuntu-22.04"' }}
# lint-runner: ${{ contains(fromJSON('["drive-abci", "drive"]'), matrix.rs-package) && '[ "self-hosted", "linux", "arm64", "ubuntu-platform" ]' || '"ubuntu-24.04"' }}
# FIXME: Clippy fails on github hosted runners, most likely due to RAM usage. Using self-hosted runners for now.
lint-runner: '[ "self-hosted", "linux", "arm64", "ubuntu-platform" ]'
# lint-runner: '[ "self-hosted", "linux", "arm64", "ubuntu-platform" ]'
lint-runner: '["ubuntu-24.04"]'
# Run drive tests on self-hosted 4x
test-runner: '[ "self-hosted", "linux", "arm64", "ubuntu-platform" ]'
# test-runner: '[ "self-hosted", "linux", "arm64", "ubuntu-platform" ]'
test-runner: '["ubuntu-24.04"]'
check-each-feature: ${{ contains(fromJSON('["dash-sdk","rs-dapi-client","dapi-grpc","dpp","drive-abci"]'), matrix.rs-package) }}

rs-crates-security:
name: Rust crates security audit
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || !github.event.pull_request.draft }}
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Check out repo
uses: actions/checkout@v4
Expand Down Expand Up @@ -116,7 +140,7 @@ jobs:
js-deps-versions:
name: JS dependency versions check
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || !github.event.pull_request.draft }}
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Check out repo
uses: actions/checkout@v4
Expand All @@ -135,7 +159,7 @@ jobs:
js-npm-security:
name: JS NPM security audit
if: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || !github.event.pull_request.draft }}
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Check out repo
uses: actions/checkout@v4
Expand Down
Loading