diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba6c6e38..28124717 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,16 +12,24 @@ env: CARGO_TERM_COLOR: always jobs: - buildTestAya: - uses: melodium-tech/github-actions/.github/workflows/melodium-local-distrib.yml@v0.9.0 + buildTestAyaDirect: + uses: melodium-tech/github-actions/.github/workflows/melodium-ubuntu.yml@v0.9.1 with: - version: 0.9.1 command: | - run .melodium-ci/Compo.toml buildTestAya --repository_clone_url='"${{ github.repositoryUrl }}"' --repository_clone_ref='"${{ github.ref_name }}"' --github_contexts='$''{{{{ { "github": ${{ toJSON(github) }}, "vars": ${{ toJSON(vars) }}, "secrets": { "GITHUB_TOKEN": "'"$GITHUB_TOKEN"'" } } }}}}' + run .melodium-ci/Compo.toml buildTestAyaDirect --github_contexts='$''{{{{ { "github": ${{ toJSON(github) }}, "vars": ${{ toJSON(vars) }}, "secrets": { "GITHUB_TOKEN": "'"$GITHUB_TOKEN"'" } } }}}}' artifact-path: 'logs/' - melodium_images_pull_source: registry.gitlab.com/melodium/containers secrets: token: ${{ secrets.GITHUB_TOKEN }} + #buildTestAya: + #uses: melodium-tech/github-actions/.github/workflows/melodium-local-distrib.yml@v0.9.0 + #with: + # version: 0.9.1 + # command: | + # run .melodium-ci/Compo.toml buildTestAya --repository_clone_url='"${{ github.repositoryUrl }}"' --repository_clone_ref='"${{ github.ref_name }}"' --github_contexts='$''{{{{ { "github": ${{ toJSON(github) }}, "vars": ${{ toJSON(vars) }}, "secrets": { "GITHUB_TOKEN": "'"$GITHUB_TOKEN"'" } } }}}}' + # artifact-path: 'logs/' + # melodium_images_pull_source: registry.gitlab.com/melodium/containers + #secrets: + # token: ${{ secrets.GITHUB_TOKEN }} #runs-on: ubuntu-latest #steps: # - uses: actions/checkout@v5 diff --git a/.melodium-ci/Compo.toml b/.melodium-ci/Compo.toml index 2f421b7e..ba090647 100644 --- a/.melodium-ci/Compo.toml +++ b/.melodium-ci/Compo.toml @@ -16,4 +16,5 @@ work = "^0.9.0" [entrypoints] buildTestAya = "ci::buildTestAya" +buildTestAyaDirect = "ci/on_image::buildTestAya" diff --git a/.melodium-ci/melodium b/.melodium-ci/melodium deleted file mode 100755 index 6f16c506..00000000 Binary files a/.melodium-ci/melodium and /dev/null differ diff --git a/.melodium-ci/on_image.mel b/.melodium-ci/on_image.mel new file mode 100644 index 00000000..d32e4b3d --- /dev/null +++ b/.melodium-ci/on_image.mel @@ -0,0 +1,160 @@ +use cicd/logging::manageLogs +use cicd/services/github::prepareContexts +use cicd/services/github::postGithubStateContext +use cicd/services/github::|pending +use cicd/services/github::|success +use cicd/services/github::|error +use cicd/services/github::|failure +use cicd/naive::localStep +use log/logger::Logger +use javascript::JavaScriptEngine +use process/command::|raw_commands +use std/data/string_map::StringMap +use std/data/string_map::|entry +use std/data/string_map::|map +use std/engine/util::startup +use std/flow::waitBlock +use std/flow::trigger +use std/flow/concentrate::Concentrator +use std/flow/concentrate::concentrateBlock +use std/flow/concentrate::concentrated +use std/ops/option::|wrap +use std/text/compose::|format + +treatment buildTestAya(const github_contexts: string = "{}") + model logger: Logger() + model finish_concentrator: Concentrator() + model github_contexts: JavaScriptEngine() +{ + startup() + prepareContexts[contexts=github_contexts](github_contexts=github_contexts) + manageLogs[logger=logger](output_directory="logs/") + concentratedFinish: concentrated[concentrator=finish_concentrator]() + triggerFinish: trigger() + startup.trigger -> prepareContexts.trigger,ready -> concentratedFinish.trigger,data -> triggerFinish.stream,end -> manageLogs.stop + + build_aarch64: buildTestAyaForArch[logger=logger, github_contexts=github_contexts, finish_concentrator=finish_concentrator]( + short_rust_arch="aarch64", + full_rust_arch="aarch64-unknown-linux-gnu", + ubuntu_arch="arm64" + ) + /*build_armv7: buildTestAyaForArch[logger=logger, dispatcher=dispatcher, github_contexts=github_contexts, finish_concentrator=finish_concentrator]( + short_rust_arch="armv7", + full_rust_arch="armv7-unknown-linux-gnueabi", + ubuntu_arch="armhf", + repository_clone_ref=repository_clone_ref, + repository_clone_url=repository_clone_url + ) + build_powerpc64le: buildTestAyaForArch[logger=logger, dispatcher=dispatcher, github_contexts=github_contexts, finish_concentrator=finish_concentrator]( + short_rust_arch="powerpc64le", + full_rust_arch="powerpc64le-unknown-linux-gnu", + ubuntu_arch="ppc64le", + repository_clone_ref=repository_clone_ref, + repository_clone_url=repository_clone_url + ) + build_riscv64gc: buildTestAyaForArch[logger=logger, dispatcher=dispatcher, github_contexts=github_contexts, finish_concentrator=finish_concentrator]( + short_rust_arch="riscv64gc", + full_rust_arch="riscv64gc-unknown-linux-gnu", + ubuntu_arch="riscv64", + repository_clone_ref=repository_clone_ref, + repository_clone_url=repository_clone_url + ) + build_s390x: buildTestAyaForArch[logger=logger, dispatcher=dispatcher, github_contexts=github_contexts, finish_concentrator=finish_concentrator]( + short_rust_arch="s390x", + full_rust_arch="s390x-unknown-linux-gnu", + ubuntu_arch="s390x", + repository_clone_ref=repository_clone_ref, + repository_clone_url=repository_clone_url + ) + build_x86_64: buildTestAyaForArch[logger=logger, dispatcher=dispatcher, github_contexts=github_contexts, finish_concentrator=finish_concentrator]( + short_rust_arch="x86_64", + full_rust_arch="x86_64-unknown-linux-gnu", + ubuntu_arch="amd64", + repository_clone_ref=repository_clone_ref, + repository_clone_url=repository_clone_url + )*/ + + prepareContexts.ready -> build_aarch64.trigger + /*prepareContexts.ready -> build_armv7.trigger + prepareContexts.ready -> build_powerpc64le.trigger + prepareContexts.ready -> build_riscv64gc.trigger + prepareContexts.ready -> build_s390x.trigger + prepareContexts.ready -> build_x86_64.trigger*/ +} + +treatment buildTestAyaForArch[logger: Logger, github_contexts: JavaScriptEngine, finish_concentrator: Concentrator](short_rust_arch: string, full_rust_arch: string, ubuntu_arch: string) + input trigger: Block + output finished: Block +{ + concentrateFinish: concentrateBlock[concentrator=finish_concentrator]() + build.finished -> concentrateFinish.data + + prepareSystem: localStep[logger=logger]( + name = |format("prepare_{short}", |entry("short", short_rust_arch)), + commands = |raw_commands([ + ${bash -c "curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/taiki-e/setup-cross-toolchain-action/refs/tags/v1/main.sh | bash -"}, + |format("cat /tmp/{short}/github.env", |entry("short", short_rust_arch)) + ]), + variables = |wrap( + |map([ + |entry("INPUT_TARGET", full_rust_arch), + |entry("GITHUB_ENV", |format("cat /tmp/{short}/github.env", |entry("short", short_rust_arch))) + ]), + _, // working_directory + false, // expand_variables + false // clear_env + ) + ) + + prepareRust: localStep[logger=logger]( + name = |format("prepare_{short}", |entry("short", short_rust_arch)), + commands = |raw_commands([ + |format("rustup target add {arch}", |entry("arch", full_rust_arch)), + ${bash -c "curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash -"}, + "cargo binstall cargo-hack" + ]) + ) + + prepare: waitBlock() + Self.trigger -> prepareSystem.trigger,success -> prepare.a + Self.trigger -> prepareRust.trigger,success ---> prepare.b + + build: localStep[logger=logger]( + name = |format("build_{short}", |entry("short", short_rust_arch)), + commands = |raw_commands([ + // Build + ${bash -c "set -o allexport && source /tmp/github.env && set +o allexport + cargo hack build --all-targets --feature-powerset --exclude aya-ebpf --exclude aya-ebpf-bindings --exclude aya-log-ebpf --exclude integration-ebpf --exclude xtask --workspace" + }, + // Test + ${bash -c "set -o allexport && source /tmp/github.env && set +o allexport + cargo hack test --all-targets --feature-powerset --exclude aya-ebpf --exclude aya-ebpf-bindings --exclude aya-log-ebpf --exclude integration-ebpf --exclude integration-test --exclude xtask --workspace" + }, + // Doc + ${bash -c "set -o allexport && source /tmp/github.env && set +o allexport + cargo hack test --doc --feature-powerset --exclude aya-ebpf --exclude aya-ebpf-bindings --exclude aya-log-ebpf --exclude integration-ebpf --exclude integration-test --exclude xtask --workspace" + } + ]), + variables = |wrap( + |map([ + |entry("RUST_BACKTRACE", "full"), + |entry("CARGO_BUILD_TARGET", full_rust_arch) + ]), + "/root/aya", // working_directory + false, // expand_variables + false // clear_env + ) + ) + + prepare.awaited -> build.trigger,finished -> Self.finished + + pendingState: postGithubStateContext[contexts=github_contexts, logger=logger](state = |pending(), name = short_rust_arch, description = "Build and Test Aya on arch", log_response = true) + successState: postGithubStateContext[contexts=github_contexts, logger=logger](state = |success(), name = short_rust_arch, description = "Build and Test Aya on arch", log_response = true) + errorState: postGithubStateContext[contexts=github_contexts, logger=logger](state = |error(), name = short_rust_arch, description = "Build and Test Aya on arch", log_response = true) + failureState: postGithubStateContext[contexts=github_contexts, logger=logger](state = |failure(), name = short_rust_arch, description = "Build and Test Aya on arch", log_response = true) + + Self.trigger --> pendingState.trigger + build.success -> successState.trigger + build.error ---> errorState.trigger + build.failed --> failureState.trigger +}