Astarte end-to-end test #37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Astarte end-to-end test | |
| on: | |
| # Run when pushing to stable branches | |
| push: | |
| paths: | |
| - "apps/**" | |
| - "tools/astarte_e2e/**" | |
| - ".github/workflows/astarte-end-to-end-test-workflow.yaml" | |
| branches: | |
| - "master" | |
| - "release-*" | |
| # Run on branch/tag creation | |
| create: | |
| # Run on pull requests matching apps | |
| pull_request: | |
| paths: | |
| - "apps/**" | |
| - "tools/astarte_e2e/**" | |
| - ".github/workflows/astarte-end-to-end-test-workflow.yaml" | |
| # Allow this workflow to be called by others | |
| workflow_call: | |
| env: | |
| elixir_version: "1.15" | |
| otp_version: "26.1" | |
| CLEA_DEV_BASE: "" | |
| CLEA_DEV_REALM: "" | |
| CLEA_DEV_REALM_TOKEN: "" | |
| BOARD_BASE_URL: "" | |
| jobs: | |
| e2e-build: | |
| uses: ./.github/workflows/astarte-e2e-build-workflow.yaml | |
| astarte-build: | |
| uses: ./.github/workflows/astarte-build-workflow.yaml | |
| end-to-end-test: | |
| needs: [e2e-build, astarte-build] | |
| name: End-to-end Test | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2 | |
| - name: Initialize docker compose files | |
| run: docker run -v $(pwd)/compose:/compose astarte/docker-compose-initializer | |
| - name: Restore astarte images | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | |
| with: | |
| # Download all app images; merge them into the same directory for loading | |
| pattern: astarte-images-* | |
| merge-multiple: true | |
| path: ${{ runner.temp }} | |
| - name: Restore astarte e2e image | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | |
| with: | |
| name: astarte-e2e-image | |
| path: ${{ runner.temp }} | |
| - name: Load astarte images | |
| run: ls ${{ runner.temp }}/*.tar | xargs --max-args 1 docker load --input | |
| - name: Start all Astarte services | |
| run: docker compose up --no-build --pull missing -d | |
| - name: Wait for Astarte to come up | |
| run: | | |
| wget https://github.com/astarte-platform/wait-for-astarte-docker-compose/releases/download/v1.1.0/wait-for-astarte-docker-compose_1.1.0_linux_amd64.tar.gz | |
| tar xf wait-for-astarte-docker-compose_1.1.0_linux_amd64.tar.gz | |
| ./wait-for-astarte-docker-compose | |
| - name: Install astartectl | |
| run: | | |
| wget https://github.com/astarte-platform/astartectl/releases/download/v24.5.3/astartectl_24.5.3_linux_x86_64.tar.gz | |
| tar xf astartectl_24.5.3_linux_x86_64.tar.gz | |
| chmod +x astartectl | |
| - name: Generate realm keypair and JWT | |
| run: | | |
| ./astartectl utils gen-keypair test | |
| E2E_HOUSEKEEPING_API_JWT=$(./astartectl utils gen-jwt housekeeping -k compose/astarte-keys/housekeeping_private.pem) | |
| echo "E2E_HOUSEKEEPING_API_JWT=$E2E_HOUSEKEEPING_API_JWT" >> $GITHUB_ENV | |
| - name: Generate JWT | |
| run: | | |
| JWT=$(./astartectl utils gen-jwt appengine channels pairing realm-management -k test_private.pem) | |
| echo "E2E_JWT=$JWT" >> $GITHUB_ENV | |
| - name: Run Astarte E2E | |
| working-directory: tools/astarte_e2e | |
| env: | |
| E2E_HOST: "astarte-e2e" | |
| E2E_PAIRING_URL: http://api.astarte.localhost/pairing | |
| E2E_APPENGINE_URL: http://api.astarte.localhost/appengine | |
| E2E_HOUSEKEEPING_URL: http://api.astarte.localhost/housekeeping | |
| E2E_REALM_MANAGEMENT_URL: http://api.astarte.localhost/realmmanagement | |
| E2E_AMQP_CONSUMER_HOST: rabbitmq | |
| E2E_IGNORE_SSL_ERRORS: true | |
| E2E_CHECK_INTERVAL_SECONDS: 5 | |
| E2E_CHECK_REPETITIONS: 5 | |
| E2E_MAILER_TO_ADDRESS: mail@example.com | |
| E2E_MAIL_SUBJECT: "Subj: Astarte Notification" | |
| run: | | |
| docker run \ | |
| -e E2E_REALM_PUBLIC_KEY_PEM="$(cat ../../test_public.pem)" \ | |
| --env-file=<(env | grep '^E2E_' | grep -v '^E2E_REALM_PUBLIC_KEY_PEM=') \ | |
| --network astarte \ | |
| --hostname "$E2E_HOST" \ | |
| astarte-e2e | |
| - name: Check Docker | |
| if: ${{ failure() }} | |
| run: docker compose logs | |
| - name: Bring down Astarte docker-compose | |
| run: docker compose down | |
| fdo-end-to-end: | |
| needs: [astarte-build] | |
| name: FDO end-to-end Test | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout fdo e2e repo | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| repository: astarte-platform/astarte-device-fdo-rust | |
| ref: dev | |
| - uses: ./.github/actions/install-deps | |
| - name: Install astartectl | |
| run: | | |
| wget https://github.com/astarte-platform/astartectl/releases/download/v24.5.3/astartectl_24.5.3_linux_x86_64.tar.gz | |
| tar xf astartectl_24.5.3_linux_x86_64.tar.gz | |
| chmod +x astartectl | |
| mkdir -p ${{ runner.temp }}/bin | |
| mv ./astartectl ${{ runner.temp }}/bin | |
| echo ${{ runner.temp }}/bin >> "$GITHUB_PATH" | |
| - name: Install additional dependencies | |
| run: | | |
| sudo apt-get install -y openssl jq | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| name: checkout astarte | |
| with: | |
| path: .tmp/repos/astarte | |
| - name: Initialize docker compose files | |
| working-directory: .tmp/repos/astarte | |
| run: docker run -v $(pwd)/compose:/compose astarte/docker-compose-initializer | |
| - name: Restore astarte images | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 | |
| with: | |
| pattern: astarte-images-* | |
| merge-multiple: true | |
| path: ${{ runner.temp }} | |
| - name: Load astarte images | |
| run: ls ${{ runner.temp }}/*.tar | xargs --max-args 1 docker load --input | |
| - name: Initialize keys | |
| working-directory: .tmp/repos/astarte | |
| run: astartectl utils gen-keypair test | |
| - name: Enable FDO | |
| run: echo "PAIRING_ENABLE_FDO=true" >> .tmp/repos/astarte/.env | |
| - name: Start all Astarte services | |
| working-directory: .tmp/repos/astarte | |
| run: docker compose up --no-build --pull missing -d | |
| - uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # v1.15.2 | |
| - uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9 | |
| - name: Cache container build | |
| id: cache-container | |
| uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 | |
| with: | |
| path: .tmp/cache/containers | |
| key: ${{ runner.os }}-${{ hashFiles('justfile', 'scripts/**/*.sh', 'containers/**') }} | |
| - name: Install just | |
| uses: taiki-e/install-action@575f713d0233afba556737a7b85080563be14186 # v2.49.43 | |
| with: | |
| tool: just | |
| - run: just go-server-setup | |
| - name: Wait for Astarte to come up | |
| run: | | |
| wget https://github.com/astarte-platform/wait-for-astarte-docker-compose/releases/download/v1.1.0/wait-for-astarte-docker-compose_1.1.0_linux_amd64.tar.gz | |
| tar xf wait-for-astarte-docker-compose_1.1.0_linux_amd64.tar.gz | |
| ./wait-for-astarte-docker-compose | |
| - name: Create realm | |
| working-directory: .tmp/repos/astarte | |
| run: | | |
| astartectl housekeeping realms create -y "test" \ | |
| --astarte-url "http://api.astarte.localhost" \ | |
| --realm-public-key "test_public.pem" \ | |
| -k compose/astarte-keys/housekeeping_private.pem | |
| - name: Run FDO | |
| run: just astarte-run | |
| - name: Check Docker | |
| working-directory: .tmp/repos/astarte | |
| if: ${{ failure() }} | |
| run: docker compose logs astarte-pairing |