diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index eb588cc..9b52c11 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -9,11 +9,18 @@ on: paths: - 'asap-common/installation/**' - 'asap-planner/**' + - 'asap-planner-rs/**' - 'asap-summary-ingest/**' - 'asap-query-engine/**' - 'asap-tools/queriers/prometheus-client/**' + - 'asap-tools/data-sources/prometheus-exporters/fake_exporter/fake_exporter_rust/**' - '.github/workflows/docker.yml' workflow_dispatch: + inputs: + image-tag: + description: 'Tag to use for pushed images (e.g. v0.1.0, dev)' + required: true + default: 'dev' permissions: packages: write @@ -36,6 +43,17 @@ jobs: username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Resolve image tag + id: tag + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "value=${{ inputs.image-tag }}" >> $GITHUB_OUTPUT + elif [ "${{ github.event_name }}" = "push" ]; then + echo "value=${{ github.ref_name }}" >> $GITHUB_OUTPUT + else + echo "value=pr-test" >> $GITHUB_OUTPUT + fi + # --- Base image (Python, fast) --- - name: Build base image run: | @@ -45,11 +63,11 @@ jobs: asap-common - name: Push base image - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' run: | - docker tag sketchdb-base:latest ghcr.io/projectasap/asap-base:${{ github.ref_name }} + docker tag sketchdb-base:latest ghcr.io/projectasap/asap-base:${{ steps.tag.outputs.value }} docker tag sketchdb-base:latest ghcr.io/projectasap/asap-base:latest - docker push ghcr.io/projectasap/asap-base:${{ github.ref_name }} + docker push ghcr.io/projectasap/asap-base:${{ steps.tag.outputs.value }} docker push ghcr.io/projectasap/asap-base:latest # --- Planner (Python, depends on base) --- @@ -61,13 +79,27 @@ jobs: asap-planner - name: Push planner image - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' run: | - docker tag asap-planner:local ghcr.io/projectasap/asap-planner:${{ github.ref_name }} + docker tag asap-planner:local ghcr.io/projectasap/asap-planner:${{ steps.tag.outputs.value }} docker tag asap-planner:local ghcr.io/projectasap/asap-planner:latest - docker push ghcr.io/projectasap/asap-planner:${{ github.ref_name }} + docker push ghcr.io/projectasap/asap-planner:${{ steps.tag.outputs.value }} docker push ghcr.io/projectasap/asap-planner:latest + # --- Planner RS (Rust) --- + - name: Build and push planner-rs + uses: docker/build-push-action@v6 + with: + context: . + file: asap-planner-rs/Dockerfile + push: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} + tags: | + ghcr.io/projectasap/asap-planner-rs:${{ steps.tag.outputs.value }} + ghcr.io/projectasap/asap-planner-rs:latest + cache-from: type=registry,ref=ghcr.io/projectasap/asap-planner-rs:buildcache + cache-to: ${{ (startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch') && 'type=registry,ref=ghcr.io/projectasap/asap-planner-rs:buildcache,mode=max' || '' }} + + # --- Summary Ingest (Python, depends on base) --- - name: Build summary-ingest image run: | @@ -77,11 +109,11 @@ jobs: asap-summary-ingest - name: Push summary-ingest image - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' run: | - docker tag asap-summary-ingest:local ghcr.io/projectasap/asap-summary-ingest:${{ github.ref_name }} + docker tag asap-summary-ingest:local ghcr.io/projectasap/asap-summary-ingest:${{ steps.tag.outputs.value }} docker tag asap-summary-ingest:local ghcr.io/projectasap/asap-summary-ingest:latest - docker push ghcr.io/projectasap/asap-summary-ingest:${{ github.ref_name }} + docker push ghcr.io/projectasap/asap-summary-ingest:${{ steps.tag.outputs.value }} docker push ghcr.io/projectasap/asap-summary-ingest:latest # --- Prometheus Client (Python, depends on base) --- @@ -93,22 +125,35 @@ jobs: asap-tools/queriers/prometheus-client - name: Push prometheus-client image - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' run: | - docker tag asap-prometheus-client:local ghcr.io/projectasap/asap-prometheus-client:${{ github.ref_name }} + docker tag asap-prometheus-client:local ghcr.io/projectasap/asap-prometheus-client:${{ steps.tag.outputs.value }} docker tag asap-prometheus-client:local ghcr.io/projectasap/asap-prometheus-client:latest - docker push ghcr.io/projectasap/asap-prometheus-client:${{ github.ref_name }} + docker push ghcr.io/projectasap/asap-prometheus-client:${{ steps.tag.outputs.value }} docker push ghcr.io/projectasap/asap-prometheus-client:latest + # --- Fake Exporter (Rust) --- + - name: Build and push fake-exporter + uses: docker/build-push-action@v6 + with: + context: asap-tools/data-sources/prometheus-exporters/fake_exporter/fake_exporter_rust/fake_exporter + file: asap-tools/data-sources/prometheus-exporters/fake_exporter/fake_exporter_rust/fake_exporter/Dockerfile + push: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} + tags: | + ghcr.io/projectasap/asap-fake-exporter:${{ steps.tag.outputs.value }} + ghcr.io/projectasap/asap-fake-exporter:latest + cache-from: type=registry,ref=ghcr.io/projectasap/asap-fake-exporter:buildcache + cache-to: ${{ (startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch') && 'type=registry,ref=ghcr.io/projectasap/asap-fake-exporter:buildcache,mode=max' || '' }} + # --- Query Engine (Rust, slow — uses GHCR layer cache) --- - name: Build and push query-engine uses: docker/build-push-action@v6 with: context: . file: asap-query-engine/Dockerfile - push: ${{ startsWith(github.ref, 'refs/tags/') }} + push: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} tags: | - ghcr.io/projectasap/asap-query-engine:${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || 'pr-test' }} + ghcr.io/projectasap/asap-query-engine:${{ steps.tag.outputs.value }} ghcr.io/projectasap/asap-query-engine:latest cache-from: type=registry,ref=ghcr.io/projectasap/asap-query-engine:buildcache - cache-to: type=registry,ref=ghcr.io/projectasap/asap-query-engine:buildcache,mode=max + cache-to: ${{ (startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch') && 'type=registry,ref=ghcr.io/projectasap/asap-query-engine:buildcache,mode=max' || '' }} diff --git a/asap-quickstart/docker-compose.yml b/asap-quickstart/docker-compose.yml index 565a91e..cb0d4d7 100644 --- a/asap-quickstart/docker-compose.yml +++ b/asap-quickstart/docker-compose.yml @@ -170,7 +170,7 @@ services: ############################################################################# asap-planner: - image: ghcr.io/projectasap/asap-controller:v0.1.0 + image: ghcr.io/projectasap/asap-planner-rs:v0.1.0 container_name: asap-planner hostname: asap-planner networks: @@ -188,7 +188,7 @@ services: restart: "no" asap-summary-ingest: - image: ghcr.io/projectasap/asap-arroyosketch:v0.1.0 + image: ghcr.io/projectasap/asap-summary-ingest:v0.1.0 container_name: asap-summary-ingest hostname: asap-summary-ingest networks: @@ -221,7 +221,7 @@ services: ############################################################################# queryengine: - image: ghcr.io/projectasap/asap-queryengine:v0.1.0 + image: ghcr.io/projectasap/asap-query-engine:v0.1.0 container_name: asap-queryengine hostname: queryengine networks: