martos 0.4.0

Martos is an elegant real-time operating system designed for creating complex multi-agent systems. Developers have the flexibility to write software for Martos using either Rust (preferred) or C languages.
Documentation
name: Martos ci workflow

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

env:
  CARGO_TERM_COLOR: always


jobs:
  build:
    # TODO: all should be on self-hosted runners
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cargo build --lib --verbose

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run tests
        run: cargo test --verbose

  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Fmt
        run: cargo fmt --all -- --check

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Clippy
        run: cargo clippy -- -D clippy::all

  xtensa-esp32-rust-example-hello-world:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/xtensa-esp32/hello-world && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/xtensa-esp32/hello-world && cargo fmt --all -- --check

  xtensa-esp32-rust-example-dynamic-memory:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/xtensa-esp32/dynamic-memory && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/xtensa-esp32/dynamic-memory && cargo fmt --all -- --check

  xtensa-esp32-rust-example-timer:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/xtensa-esp32/timer && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/xtensa-esp32/timer && cargo fmt --all -- --check

  xtensa-esp32-rust-example-wifi:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/xtensa-esp32/wifi && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/xtensa-esp32/wifi && cargo fmt --all -- --check

  xtensa-esp32-static-library:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./c-library/xtensa-esp32 && . /root/export-esp.sh && cargo build --release
      - name: Fmt
        run: cd ./c-library/xtensa-esp32 && cargo fmt --all -- --check
      - name: Archive production artifacts
        uses: actions/upload-artifact@v4
        with:
          name: xtensa-esp32-static-library
          path: c-library/xtensa-esp32/target/xtensa-esp32-none-elf/release/libxtensa_esp32_static_lib.a
          retention-days: 7

  xtensa-esp32-c-example:
    needs: xtensa-esp32-static-library
    runs-on: ubuntu-latest
    env:
      IDF_PATH: /root/esp/esp-idf
      IDF_TOOLS_PATH: /root/.espressif
    container:
      image: arkhipovivan1/xtensa-esp32-c:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Download static library
        uses: actions/download-artifact@v4
        with:
          name: xtensa-esp32-static-library
          path: c-library/xtensa-esp32/target/xtensa-esp32-none-elf/release
      - name: Build
        run: cd ./examples/c-examples/xtensa-esp32 && . /root/esp/esp-idf/export.sh && make && esptool.py --chip esp32 elf2image --flash_mode="dio" --flash_freq "40m" --flash_size "4MB" -o main.bin main.elf

 
  risc-v-esp32c6-rust-example-hello-world:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/risc-v-esp32-c6/hello-world && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/risc-v-esp32-c6/hello-world && cargo fmt --all -- --check

  risc-v-esp32c6-rust-example-dynamic-memory:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/risc-v-esp32-c6/dynamic-memory && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/risc-v-esp32-c6/dynamic-memory && cargo fmt --all -- --check

  risc-v-esp32c6-rust-example-timer:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/risc-v-esp32-c6/timer && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/risc-v-esp32-c6/timer && cargo fmt --all -- --check

  risc-v-esp32c6-rust-example-wifi:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./examples/rust-examples/risc-v-esp32-c6/wifi && . /root/export-esp.sh && cargo build
      - name: Fmt
        run: cd ./examples/rust-examples/risc-v-esp32-c6/wifi && cargo fmt --all -- --check

  risc-v-esp32c6-static-library:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: arkhipovivan1/xtensa-esp32-rust:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: cd ./c-library/risc-v-esp32-c6 && . /root/export-esp.sh && cargo build --release
      - name: Fmt
        run: cd ./c-library/risc-v-esp32-c6 && cargo fmt --all -- --check
      - name: Archive production artifacts
        uses: actions/upload-artifact@v4
        with:
          name: risc-v-esp32c6-static-library
          path: c-library/risc-v-esp32-c6/target/riscv32imac-unknown-none-elf/release/librisc_v_esp32c6_static_lib.a
          retention-days: 7


  mips64-rust-example-hello-world:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: ubuntu:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Dependencies
        run: apt update && apt install curl build-essential lld -y && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && echo 'PATH="${PATH}:/root/.cargo/bin"' >> $GITHUB_PATH && . "/root/.cargo/env" && rustup toolchain install nightly && rustup default 1.71 && rustup target add mips64el-unknown-linux-gnuabi64 && rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
      - name: Build
        run: cd ./examples/rust-examples/mips64/hello-world && cargo +nightly build --release
      - name: Fmt
        run: cd ./examples/rust-examples/mips64/hello-world && cargo +nightly fmt --all -- --check

  mips64-rust-example-dynamic-memory:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: ubuntu:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Dependencies
        run: apt update && apt install curl build-essential lld -y && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && echo 'PATH="${PATH}:/root/.cargo/bin"' >> $GITHUB_PATH && . "/root/.cargo/env" && rustup toolchain install nightly && rustup default 1.71 && rustup target add mips64el-unknown-linux-gnuabi64 && rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
      - name: Build
        run: cd ./examples/rust-examples/mips64/dynamic-memory && cargo +nightly build --release
      - name: Fmt
        run: cd ./examples/rust-examples/mips64/dynamic-memory && cargo +nightly fmt --all -- --check

  mips64-rust-example-timer:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: ubuntu:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Dependencies
        run: apt update && apt install curl build-essential lld -y && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && echo 'PATH="${PATH}:/root/.cargo/bin"' >> $GITHUB_PATH && . "/root/.cargo/env" && rustup toolchain install nightly && rustup default 1.71 && rustup target add mips64el-unknown-linux-gnuabi64 && rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
      - name: Build
        run: cd ./examples/rust-examples/mips64/timer && cargo +nightly build --release
      - name: Fmt
        run: cd ./examples/rust-examples/mips64/timer && cargo +nightly fmt --all -- --check

  mips64-static-library:
    runs-on: ubuntu-latest
    env:
      CARGO_HOME: /root/.cargo
      RUSTUP_HOME: /root/.rustup
    container:
      image: ubuntu:latest
      options: --user root
    steps:
      - uses: actions/checkout@v3
      - name: Dependencies
        run: apt update && apt install curl build-essential lld -y && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && echo 'PATH="${PATH}:/root/.cargo/bin"' >> $GITHUB_PATH && . "/root/.cargo/env" && rustup toolchain install nightly && rustup default 1.71 && rustup target add mips64el-unknown-linux-gnuabi64 && rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
      - name: Build
        run: cd ./c-library/mips64 && cargo +nightly build --release
      - name: Fmt
        run: cd ./c-library/mips64 && cargo +nightly fmt --all -- --check
      - name: Archive production artifacts
        uses: actions/upload-artifact@v4
        with:
          name: mips64-static-library
          path: c-library/mips64/target/mips64el-unknown-linux-gnuabi64/release/libmips64_static_lib.a
          retention-days: 7