name: El CI -dev on: push: branches: - dev pull_request: branches: - dev workflow_dispatch: 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 # -Wl,--allow-multiple-definition: is_digit/is_whitespace exist in both # elc-bootstrap.c (pre-dates runtime text primitives) and el_runtime.c. # Both definitions are equivalent; allow the linker to pick one. - 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 -lm \ -Wl,--allow-multiple-definition \ -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 -lm \ -o dist/platform/elc chmod +x dist/platform/elc echo "gen3 (self-hosted) elc built" dist/platform/elc --version || true # Run all four test suites -all must pass - 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 # Native El test suites (elc --test, compile-link-run) - name: Run tests -native (text) run: | set -euo pipefail ELC="$(pwd)/dist/platform/elc" RUNTIME="$(pwd)/el-compiler/runtime" "$ELC" --test tests/native/test_text.el > /tmp/el_native_text.c gcc -O2 -I "$RUNTIME" /tmp/el_native_text.c "$RUNTIME/el_runtime.c" \ -lcurl -lpthread -lm -o /tmp/el_native_text /tmp/el_native_text # Publish artifact to GCP Artifact Registry (dev) - name: Publish elc 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 # Also tag as latest-dev echo "Published elc version=${VERSION} to foundation-dev/el/elc" rm -f /tmp/gcp-key.json