feat: Rust API server #2885
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: CI | |
on: | |
pull_request: | |
concurrency: | |
group: ci-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
verify-versions: | |
name: Verify Versions | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
fetch-depth: 0 | |
- run: npm i -g pnpm @antfu/ni | |
- name: Setup Node.js | |
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 | |
with: | |
node-version: 18.x | |
cache: pnpm | |
- name: Install Dependencies | |
run: nci | |
- name: Verify Versions | |
run: nr verify-versions | |
format-csharp: | |
name: Format C# | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
ref: ${{ github.ref }} | |
fetch-depth: 0 | |
submodules: true | |
- name: Install .NET Core | |
uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4 | |
with: | |
dotnet-version: 6.x | |
- name: Install ReSharper | |
run: | | |
dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2022.2.2 | |
- name: Restore | |
run: | | |
cd packages/csharp | |
dotnet restore ArmoniK.Api.sln | |
- name: Reformat | |
run: | | |
cd packages/csharp | |
jb cleanupcode ArmoniK.Api.sln | |
- name: Check Diff | |
run: | | |
DIFF="$(git diff --name-only)" | |
if [ -z "$DIFF" ]; then | |
echo "OK: Format is clean" | |
else | |
echo "Error: Format was not clean" | |
echo "List of files:" | |
echo "$DIFF" | |
git diff | |
exit 1 | |
fi | |
format-python: | |
name: Check linting, formatting and typing | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: packages/python | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
fetch-depth: 0 | |
- name: pip update and add build package | |
run: bash proto2python.sh ~/pyvenv | |
- name: Install dependencies | |
run: | | |
source ~/pyvenv/bin/activate | |
python -m pip install uv | |
python -m uv pip install "$(echo pkg/armonik*.whl)[dev]" | |
- name: Lint | |
run: | | |
source ~/pyvenv/bin/activate | |
python -m ruff check . | |
# - name: Check typing | |
# run: | | |
# source ~/pyvenv/bin/activate | |
# python -m mypy --exclude src/armonik/protogen/ src/ | |
- name: Check format | |
run: | | |
source ~/pyvenv/bin/activate | |
python -m ruff format . | |
- name: Check Diff | |
run: | | |
DIFF="$(git diff --name-only)" | |
if [ -z "$DIFF" ]; then | |
echo "OK: Format is clean" | |
else | |
echo "Error: Format was not clean" | |
echo "List of files:" | |
echo "$DIFF" | |
git diff | |
exit 1 | |
fi | |
format-cpp: | |
name: Format C++ | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
ref: ${{ github.ref }} | |
fetch-depth: 0 | |
- name: Run clang-format | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y clang-format | |
- name: Check Diff | |
id: check-diff | |
run: | | |
cd packages/cpp | |
git ls-files *.{c,h,hpp,cpp,cc} | xargs clang-format -style=file:.clang-format -i | |
DIFF="$(git diff --name-only)" | |
if [ -z "$DIFF" ]; then | |
echo "OK: Format is clean" | |
else | |
echo "Error: Format was not clean" | |
echo "List of files:" | |
echo "$DIFF" | |
git diff | |
exit 1 | |
fi | |
- name: Generate patch | |
if: ${{ failure() && steps.check-diff.conclusion == 'failure' }} | |
run: | | |
git diff > patch-cpp.diff | |
- uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a | |
if: ${{ failure() && steps.check-diff.conclusion == 'failure' }} | |
with: | |
name: patch-cpp | |
path: ./patch-cpp.diff | |
format-protobuf: | |
name: Format Protobuf | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
ref: ${{ github.ref }} | |
fetch-depth: 0 | |
submodules: true | |
- name: Check Diff | |
run: docker run --rm --volume "$(pwd)/Protos/V1:/workspace" --workdir /workspace bufbuild/buf:1.8.0 format -d --exit-code | |
format-rust: | |
name: Format and check Rust | |
strategy: | |
fail-fast: false | |
matrix: | |
toolchain: | |
- stable | |
- nightly | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: packages/rust/armonik | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
fetch-depth: 0 | |
- uses: taiki-e/install-action@v2 | |
with: | |
tool: protoc,sccache | |
- name: Install toolchain | |
if: ${{ !contains(matrix.toolchain, 'nightly') }} | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rust-src,rust-docs,rustfmt,clippy | |
- name: Build | |
run: | | |
cargo build --all --locked | |
- name: Format | |
run: | | |
cargo fmt --all --check | |
- name: Doc | |
run: | | |
RUSTDOCFLAGS="-Dwarnings" cargo doc | |
- name: Clippy | |
run: | | |
cargo clippy --all --no-deps -- -Dwarnings -Dunused-crate-dependencies | |
lint-js: | |
name: Lint JS | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
fetch-depth: 0 | |
- run: npm install -g [email protected] | |
- run: corepack enable | |
- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 | |
with: | |
node-version: 20 | |
cache: pnpm | |
- run: pnpm install --frozen-lockfile | |
- run: pnpm run lint | |
build-web: | |
name: Build Web | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: packages/web | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
fetch-depth: 0 | |
- run: npm i -g pnpm @antfu/ni | |
- name: Setup Node.js | |
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 | |
with: | |
node-version: 18.x | |
cache: pnpm | |
- name: Install Dependencies | |
run: nci | |
- name: Install Protoc | |
run: sudo apt install -y protobuf-compiler | |
- name: Build protos | |
run: nr proto:generate:linux | |
- name: Build | |
run: nr build | |
build-angular: | |
name: Build Angular | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: packages/angular | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
fetch-depth: 0 | |
- run: npm i -g pnpm @antfu/ni | |
- name: Setup Node.js | |
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 | |
with: | |
node-version: 18.x | |
cache: pnpm | |
- name: Install Dependencies | |
run: nci | |
- name: Install Protoc | |
run: sudo apt install -y protobuf-compiler | |
- name: Build protos | |
run: nr proto:generate:linux | |
- name: Build | |
run: nr build | |
build-cpp-packages: | |
strategy: | |
fail-fast: false | |
matrix: | |
type: [tar.gz, deb, rpm] | |
name: Build C++ Packages [${{ matrix.type }}] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
ref: ${{ github.ref }} | |
- name: Build the package | |
run: | | |
cd packages/cpp/tools/packaging | |
./make-${{ matrix.type }}.sh | |
- name: Publish package as artefact | |
uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a | |
with: | |
if-no-files-found: error | |
path: packages/cpp/tools/packaging/*.${{ matrix.type }} | |
name: libarmonik.${{ matrix.type }} | |
build-java-packages: | |
name: Build Java | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: packages/java | |
steps: | |
- name: Checkout | |
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up java 17 | |
uses: actions/setup-java@v4 | |
with: | |
distribution: oracle | |
java-version: 17 | |
cache: maven | |
gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }} | |
gpg-passphrase: MAVEN_GPG_PASSPHRASE | |
- name: Build the package | |
run: mvn clean install -DskipTests | |
env: | |
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_SIGNING_KEY_PASSWORD }} |