diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8bc3b57 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,155 @@ +name: CI + +# Builds and tests every language surface in the repo. Until this existed, the +# only automation was the two PyPI publish jobs — nothing compiled Java, and a +# compile error in ports/jagentic-core (AGS-9) left the whole JVM tree +# unbuildable from a clean checkout without anyone noticing. + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + jvm: + name: JVM (Java 21) + runs-on: ubuntu-latest + timeout-minutes: 45 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "21" + cache: maven + + # The build order below is manual because there is no Maven reactor: the + # root pom has no and every module is built by an explicit -f. + # ports/jagentic-core is a hard compile-scope dependency of the main + # module and is not published anywhere, so it has to be installed first. + # AGS-10 tracks replacing this with a real parent pom. + - name: jagentic-core (shared JVM core) + run: mvn -B -ntp -f ports/jagentic-core/pom.xml install + + # `install` rather than `test`: runs the main suite AND publishes the + # artifact that a2a-gateway and banking-job depend on. + - name: agentic-flink (main module) + run: mvn -B -ntp install + + - name: ports/kafka-streams + run: mvn -B -ntp -f ports/kafka-streams/pom.xml test + - name: ports/spring + run: mvn -B -ntp -f ports/spring/pom.xml test + - name: ports/quarkus + run: mvn -B -ntp -f ports/quarkus/pom.xml test + - name: ports/temporal + run: mvn -B -ntp -f ports/temporal/pom.xml test + - name: ports/pekko + run: mvn -B -ntp -f ports/pekko/pom.xml test + - name: ports/pulsar + run: mvn -B -ntp -f ports/pulsar/pom.xml test + + - name: agentic-pekko (actor runtime) + run: mvn -B -ntp -f agentic-pekko/pom.xml test + + - name: tool-services (packs, then app) + run: | + mvn -B -ntp -f tool-services/tool-services-packs/pom.xml install + mvn -B -ntp -f tool-services/tool-services-app/pom.xml test + + - name: a2a-gateway + run: mvn -B -ntp -f a2a-gateway/pom.xml test + + - name: banking-job (uber-jar assembly) + run: mvn -B -ntp -f banking-job/pom.xml test + + - name: Collect surefire reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: surefire-reports + path: "**/target/surefire-reports/*.txt" + if-no-files-found: warn + retention-days: 7 + + go: + name: Go + runs-on: ubuntu-latest + timeout-minutes: 20 + defaults: + run: + working-directory: ports/go + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: ports/go/go.mod + cache-dependency-path: ports/go/go.sum + + - name: go vet + run: go vet ./... + + - name: go test + run: go test ./... + + clojure: + name: Clojure (Datomic runtime) + runs-on: ubuntu-latest + timeout-minutes: 25 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "21" + + - uses: DeLaGuardo/setup-clojure@13.6.1 + with: + cli: latest + + - name: Cache clojure deps + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: clj-${{ runner.os }}-${{ hashFiles('agentic-clj/deps.edn') }} + restore-keys: clj-${{ runner.os }}- + + - name: clojure -X:test + working-directory: agentic-clj + run: clojure -X:test + + python: + name: Python (pyagentic + adapters) + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + # `celery` is needed because ports/tests exercises the Celery adapter + # against the real engine in eager mode (no broker required); without it + # two tests hard-fail rather than skipping. + - name: Install + run: | + python -m pip install --upgrade pip + python -m pip install -e "ports/pyagentic[test]" celery + + - name: pyagentic + run: python -m pytest ports/pyagentic/tests -q + + - name: port adapters + run: python -m pytest ports/tests -q diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index 5ea2564..b061bee 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -3,8 +3,12 @@ name: Publish Python package to PyPI # Fires on every published GitHub Release. # Uses PyPI Trusted Publishing (OIDC) — no API tokens stored in this repo. # Configure the trusted publisher once on https://pypi.org/manage/account/publishing/ -# (project: agentic-flink, owner: Ugbot, repo: Agentic-Flink, workflow: publish-pypi.yml, +# (project: agentic-flink, owner: Ugbot, repo: Agentic-Streaming, workflow: publish-pypi.yml, # environment: pypi). +# +# NOTE: the repo was renamed Agentic-Flink -> Agentic-Streaming. PyPI matches the +# OIDC token's `repository` claim exactly, so the trusted publisher must be +# re-registered against Agentic-Streaming on pypi.org or this upload is rejected. on: release: diff --git a/.github/workflows/publish-testpypi.yml b/.github/workflows/publish-testpypi.yml index 0c0f9b7..5b8dfeb 100644 --- a/.github/workflows/publish-testpypi.yml +++ b/.github/workflows/publish-testpypi.yml @@ -2,8 +2,11 @@ name: Publish Python package to TestPyPI # Manual dispatch only — use this to rehearse a release on TestPyPI before the # real one. Trusted Publishing must be configured separately on test.pypi.org. -# (project: agentic-flink, owner: Ugbot, repo: Agentic-Flink, workflow: +# (project: agentic-flink, owner: Ugbot, repo: Agentic-Streaming, workflow: # publish-testpypi.yml, environment: testpypi). +# +# NOTE: the repo was renamed Agentic-Flink -> Agentic-Streaming; re-register the +# trusted publisher against the new name or the upload is rejected. on: workflow_dispatch: diff --git a/ports/pyagentic/pyproject.toml b/ports/pyagentic/pyproject.toml index 4f0980e..218f929 100644 --- a/ports/pyagentic/pyproject.toml +++ b/ports/pyagentic/pyproject.toml @@ -10,7 +10,9 @@ requires-python = ">=3.9" dependencies = [] [project.optional-dependencies] -test = ["pytest>=7"] +# PyYAML is needed by tests/test_cep_weave.py, which drives the sibling +# agentic-pipeline YAML loader. The library itself still has no runtime deps. +test = ["pytest>=7", "PyYAML>=6"] [tool.setuptools.packages.find] include = ["pyagentic*"] diff --git a/python/pyproject.toml b/python/pyproject.toml index 1e4a799..5582cb9 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -33,10 +33,10 @@ test = ["pytest>=7"] all = ["agentic-flink[pyflink,test]"] [project.urls] -Homepage = "https://github.com/Ugbot/Agentic-Flink" -Repository = "https://github.com/Ugbot/Agentic-Flink" -Issues = "https://github.com/Ugbot/Agentic-Flink/issues" -Documentation = "https://github.com/Ugbot/Agentic-Flink/blob/main/docs/python.md" +Homepage = "https://github.com/Ugbot/Agentic-Streaming" +Repository = "https://github.com/Ugbot/Agentic-Streaming" +Issues = "https://github.com/Ugbot/Agentic-Streaming/issues" +Documentation = "https://github.com/Ugbot/Agentic-Streaming/blob/main/docs/python.md" [tool.setuptools.packages.find] where = ["."]