From 7c644b8d89ca294d9aed084f7a21a513ecdaadd4 Mon Sep 17 00:00:00 2001 From: Will Anderson Date: Mon, 4 May 2026 19:32:05 -0500 Subject: [PATCH] Add dev/stage CI pipelines and expand sdk-release to full prod pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add ci-dev.yaml: builds elc gen2→gen3, runs 4 test suites, publishes el/elc + el_runtime.c + el_runtime.h to foundation-dev Artifact Registry - Add ci-stage.yaml: same as dev but targets foundation-stage registry - Update sdk-release.yaml: publish 3 SDK artifacts to foundation-prod Artifact Registry after Gitea release; expand dispatch list from 2 to 6 downstream repos (el-ui, elp, elql, el-ide added alongside engram/forge) --- .gitea/workflows/ci-dev.yaml | 115 ++++++++++++++++++++++++++++++ .gitea/workflows/ci-stage.yaml | 115 ++++++++++++++++++++++++++++++ .gitea/workflows/sdk-release.yaml | 114 +++++++++++++++++++++++++++++ 3 files changed, 344 insertions(+) create mode 100644 .gitea/workflows/ci-dev.yaml create mode 100644 .gitea/workflows/ci-stage.yaml diff --git a/.gitea/workflows/ci-dev.yaml b/.gitea/workflows/ci-dev.yaml new file mode 100644 index 0000000..c4e57c0 --- /dev/null +++ b/.gitea/workflows/ci-dev.yaml @@ -0,0 +1,115 @@ +name: El SDK CI — dev + +on: + push: + branches: + - dev + pull_request: + branches: + - dev + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install build dependencies + run: | + apt-get update -qq + apt-get install -y gcc libcurl4-openssl-dev + + # Gen2: compile the bootstrap C source into a working elc binary + - name: Build elc from bootstrap (gen2) + run: | + gcc -O2 \ + -I el-compiler/runtime \ + dist/elc-bootstrap.c \ + el-compiler/runtime/el_runtime.c \ + -lcurl -lpthread \ + -o dist/elc-gen2 + chmod +x dist/elc-gen2 + echo "gen2 elc built" + dist/elc-gen2 --version || true + + # Gen3: use gen2 to compile the El compiler from its own El source (self-host) + - name: Self-host: compile El compiler with gen2 (gen3) + run: | + mkdir -p dist/platform + dist/elc-gen2 el-compiler/src/compiler.el > dist/elc-gen3.c + gcc -O2 \ + -I el-compiler/runtime \ + dist/elc-gen3.c \ + el-compiler/runtime/el_runtime.c \ + -lcurl -lpthread \ + -o dist/platform/elc + chmod +x dist/platform/elc + echo "gen3 (self-hosted) elc built" + dist/platform/elc --version || true + + - name: Run tests — text + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/text/run.sh + + - name: Run tests — calendar + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/calendar/run.sh + + - name: Run tests — time + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/time/run.sh + + - name: Run tests — html_sanitizer + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/html_sanitizer/run.sh + + - name: Publish El SDK to Artifact Registry (dev) + env: + GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }} + run: | + echo "${GCP_SA_KEY}" > /tmp/gcp-key.json + apt-get install -y -qq apt-transport-https ca-certificates gnupg curl + curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg + echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" > /etc/apt/sources.list.d/google-cloud-sdk.list + apt-get update -qq && apt-get install -y google-cloud-cli + gcloud auth activate-service-account --key-file=/tmp/gcp-key.json + gcloud config set project neuron-785695 + + VERSION="${GITEA_SHA:0:8}" + + gcloud artifacts generic upload \ + --repository=foundation-dev \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/elc \ + --version="${VERSION}" \ + --source=dist/platform/elc + + gcloud artifacts generic upload \ + --repository=foundation-dev \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/el_runtime.c \ + --version="${VERSION}" \ + --source=el-compiler/runtime/el_runtime.c + + gcloud artifacts generic upload \ + --repository=foundation-dev \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/el_runtime.h \ + --version="${VERSION}" \ + --source=el-compiler/runtime/el_runtime.h + + echo "Published El SDK version=${VERSION} to foundation-dev" + rm -f /tmp/gcp-key.json diff --git a/.gitea/workflows/ci-stage.yaml b/.gitea/workflows/ci-stage.yaml new file mode 100644 index 0000000..4e44a5a --- /dev/null +++ b/.gitea/workflows/ci-stage.yaml @@ -0,0 +1,115 @@ +name: El SDK CI — stage + +on: + push: + branches: + - stage + pull_request: + branches: + - stage + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install build dependencies + run: | + apt-get update -qq + apt-get install -y gcc libcurl4-openssl-dev + + # Gen2: compile the bootstrap C source into a working elc binary + - name: Build elc from bootstrap (gen2) + run: | + gcc -O2 \ + -I el-compiler/runtime \ + dist/elc-bootstrap.c \ + el-compiler/runtime/el_runtime.c \ + -lcurl -lpthread \ + -o dist/elc-gen2 + chmod +x dist/elc-gen2 + echo "gen2 elc built" + dist/elc-gen2 --version || true + + # Gen3: use gen2 to compile the El compiler from its own El source (self-host) + - name: Self-host: compile El compiler with gen2 (gen3) + run: | + mkdir -p dist/platform + dist/elc-gen2 el-compiler/src/compiler.el > dist/elc-gen3.c + gcc -O2 \ + -I el-compiler/runtime \ + dist/elc-gen3.c \ + el-compiler/runtime/el_runtime.c \ + -lcurl -lpthread \ + -o dist/platform/elc + chmod +x dist/platform/elc + echo "gen3 (self-hosted) elc built" + dist/platform/elc --version || true + + - name: Run tests — text + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/text/run.sh + + - name: Run tests — calendar + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/calendar/run.sh + + - name: Run tests — time + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/time/run.sh + + - name: Run tests — html_sanitizer + run: | + ELC="$(pwd)/dist/platform/elc" \ + EL_HOME="$(pwd)" \ + bash tests/html_sanitizer/run.sh + + - name: Publish El SDK to Artifact Registry (stage) + env: + GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }} + run: | + echo "${GCP_SA_KEY}" > /tmp/gcp-key.json + apt-get install -y -qq apt-transport-https ca-certificates gnupg curl + curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg + echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" > /etc/apt/sources.list.d/google-cloud-sdk.list + apt-get update -qq && apt-get install -y google-cloud-cli + gcloud auth activate-service-account --key-file=/tmp/gcp-key.json + gcloud config set project neuron-785695 + + VERSION="${GITEA_SHA:0:8}" + + gcloud artifacts generic upload \ + --repository=foundation-stage \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/elc \ + --version="${VERSION}" \ + --source=dist/platform/elc + + gcloud artifacts generic upload \ + --repository=foundation-stage \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/el_runtime.c \ + --version="${VERSION}" \ + --source=el-compiler/runtime/el_runtime.c + + gcloud artifacts generic upload \ + --repository=foundation-stage \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/el_runtime.h \ + --version="${VERSION}" \ + --source=el-compiler/runtime/el_runtime.h + + echo "Published El SDK version=${VERSION} to foundation-stage" + rm -f /tmp/gcp-key.json diff --git a/.gitea/workflows/sdk-release.yaml b/.gitea/workflows/sdk-release.yaml index 72e3e24..c91fe19 100644 --- a/.gitea/workflows/sdk-release.yaml +++ b/.gitea/workflows/sdk-release.yaml @@ -128,6 +128,48 @@ jobs: echo "Release published successfully" + # Publish artifacts to GCP Artifact Registry (prod) + - name: Publish El SDK to Artifact Registry (prod) + env: + GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }} + run: | + echo "${GCP_SA_KEY}" > /tmp/gcp-key.json + apt-get install -y -qq apt-transport-https ca-certificates gnupg curl + curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg + echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" > /etc/apt/sources.list.d/google-cloud-sdk.list + apt-get update -qq && apt-get install -y google-cloud-cli + gcloud auth activate-service-account --key-file=/tmp/gcp-key.json + gcloud config set project neuron-785695 + + VERSION="${GITEA_SHA:0:8}" + + gcloud artifacts generic upload \ + --repository=foundation-prod \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/elc \ + --version="${VERSION}" \ + --source=dist/platform/elc + + gcloud artifacts generic upload \ + --repository=foundation-prod \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/el_runtime.c \ + --version="${VERSION}" \ + --source=el-compiler/runtime/el_runtime.c + + gcloud artifacts generic upload \ + --repository=foundation-prod \ + --location=us-central1 \ + --project=neuron-785695 \ + --package=el/el_runtime.h \ + --version="${VERSION}" \ + --source=el-compiler/runtime/el_runtime.h + + echo "Published El SDK version=${VERSION} to foundation-prod" + rm -f /tmp/gcp-key.json + # Dispatch el-sdk-updated event to downstream repos - name: Dispatch to foundation/engram env: @@ -164,3 +206,75 @@ jobs: } }" echo "Dispatched el-sdk-updated to neuron-technologies/forge" + + - name: Dispatch to neuron-technologies/el-ui + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_API: https://git.neuralplatform.ai/api/v1 + run: | + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${GITEA_API}/repos/neuron-technologies/el-ui/dispatches" \ + -d "{ + \"type\": \"el-sdk-updated\", + \"inputs\": { + \"el_version\": \"latest\", + \"commit\": \"${GITHUB_SHA}\" + } + }" + echo "Dispatched el-sdk-updated to neuron-technologies/el-ui" + + - name: Dispatch to neuron-technologies/elp + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_API: https://git.neuralplatform.ai/api/v1 + run: | + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${GITEA_API}/repos/neuron-technologies/elp/dispatches" \ + -d "{ + \"type\": \"el-sdk-updated\", + \"inputs\": { + \"el_version\": \"latest\", + \"commit\": \"${GITHUB_SHA}\" + } + }" + echo "Dispatched el-sdk-updated to neuron-technologies/elp" + + - name: Dispatch to neuron-technologies/elql + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_API: https://git.neuralplatform.ai/api/v1 + run: | + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${GITEA_API}/repos/neuron-technologies/elql/dispatches" \ + -d "{ + \"type\": \"el-sdk-updated\", + \"inputs\": { + \"el_version\": \"latest\", + \"commit\": \"${GITHUB_SHA}\" + } + }" + echo "Dispatched el-sdk-updated to neuron-technologies/elql" + + - name: Dispatch to neuron-technologies/el-ide + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_API: https://git.neuralplatform.ai/api/v1 + run: | + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${GITEA_API}/repos/neuron-technologies/el-ide/dispatches" \ + -d "{ + \"type\": \"el-sdk-updated\", + \"inputs\": { + \"el_version\": \"latest\", + \"commit\": \"${GITHUB_SHA}\" + } + }" + echo "Dispatched el-sdk-updated to neuron-technologies/el-ide"