name: Dev Canary Release on: schedule: # Every Monday at 06:00 UTC - cron: "0 6 * * 1" workflow_dispatch: workflow_call: concurrency: group: dev-canary-release cancel-in-progress: true permissions: contents: read packages: write jobs: # ── Gate: run core test suites before publishing ──────────────────── test-gate: name: Canary Test Gate uses: ./.github/workflows/basic_tests.yml with: ci-image: "" secrets: inherit # ── Compute canary version ────────────────────────────────────────── prepare: name: Prepare Canary Version runs-on: ubuntu-latest needs: test-gate outputs: version: ${{ steps.version.outputs.version }} canary_version: ${{ steps.version.outputs.canary_version }} steps: - name: Check out dev uses: actions/checkout@v6 with: ref: dev - name: Install uv uses: astral-sh/setup-uv@v7 - name: Install Python run: uv python install - name: Compute canary version id: version run: | BASE_VERSION="$(uv version --short)" # Strip any existing .devN suffix to get the base CLEAN_VERSION="${BASE_VERSION%%\.dev*}" # PEP 440 dev release: 0.5.4.dev20260309 CANARY_VERSION="${CLEAN_VERSION}.dev$(date -u +%Y%m%d)" echo "version=${CLEAN_VERSION}" >> "$GITHUB_OUTPUT" echo "canary_version=${CANARY_VERSION}" >> "$GITHUB_OUTPUT" echo "Canary version: ${CANARY_VERSION}" # ── Publish to PyPI ───────────────────────────────────────────────── release-pypi: name: Publish Dev Canary to PyPI needs: prepare runs-on: ubuntu-latest steps: - name: Check out dev uses: actions/checkout@v6 with: ref: dev - name: Install uv uses: astral-sh/setup-uv@v7 - name: Install Python run: uv python install - name: Set canary version in pyproject.toml run: uv version "${{ needs.prepare.outputs.canary_version }}" - name: Install dependencies run: uv sync --all-extras - name: Build distributions run: uv build - name: Publish to PyPI env: UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }} run: uv publish # ── Publish Docker image ──────────────────────────────────────────── release-docker: name: Publish Dev Canary Docker Image needs: prepare runs-on: ubuntu-latest steps: - name: Check out dev uses: actions/checkout@v6 with: ref: dev - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . platforms: linux/amd64,linux/arm64 push: true tags: | cognee/cognee:dev-canary cognee/cognee:${{ needs.prepare.outputs.canary_version }} labels: | version=${{ needs.prepare.outputs.canary_version }} flavour=dev-canary cache-from: type=registry,ref=cognee/cognee:buildcache cache-to: type=registry,ref=cognee/cognee:buildcache,mode=max