feat: use GitHub Action for base os testing #1
Workflow file for this run
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: integration-tests | |
| permissions: | |
| contents: read | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: ['*'] | |
| workflow_dispatch: | |
| jobs: | |
| integration-test: | |
| runs-on: ${{ matrix.arch.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| arch: | |
| - runner: ubuntu-latest | |
| rie: aws-lambda-rie | |
| label: x64 | |
| - runner: ubuntu-24.04-arm | |
| rie: aws-lambda-rie-arm64 | |
| label: arm64 | |
| distro_config: | |
| # al2023 | |
| - distro: al2023 | |
| distro_version: "al2023" | |
| runtime_version: "3.4" | |
| executable: /usr/local/bin/aws_lambda_ric | |
| - distro: al2023 | |
| distro_version: "al2023" | |
| runtime_version: "3.3" | |
| executable: /usr/local/bin/aws_lambda_ric | |
| # Alpine | |
| - distro: alpine | |
| distro_version: "3.23" | |
| runtime_version: "3.4" | |
| executable: /usr/local/bundle/bin/aws_lambda_ric | |
| - distro: alpine | |
| distro_version: "3.23" | |
| runtime_version: "3.3" | |
| executable: /usr/local/bundle/bin/aws_lambda_ric | |
| # Debian | |
| - distro: debian | |
| distro_version: bookworm | |
| runtime_version: "3.4" | |
| executable: /usr/local/bundle/bin/aws_lambda_ric | |
| - distro: debian | |
| distro_version: bookworm | |
| runtime_version: "3.3" | |
| executable: /usr/local/bundle/bin/aws_lambda_ric | |
| # Ubuntu | |
| - distro: ubuntu | |
| distro_version: "24.04" | |
| runtime_version: "3.4" | |
| executable: /usr/local/bin/aws_lambda_ric | |
| - distro: ubuntu | |
| distro_version: "24.04" | |
| runtime_version: "3.3" | |
| executable: /usr/local/bin/aws_lambda_ric | |
| name: "${{ matrix.distro_config.distro }} ${{ matrix.distro_config.distro_version }} / ruby ${{ matrix.distro_config.runtime_version }} (${{ matrix.arch.label }})" | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Download RIE | |
| run: | | |
| mkdir -p .scratch | |
| RIE_NAME="${{ matrix.arch.rie }}" | |
| curl -sSL "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/${RIE_NAME}" -o ".scratch/${RIE_NAME}" | |
| chmod +x ".scratch/${RIE_NAME}" | |
| echo "RIE_NAME=${RIE_NAME}" >> "$GITHUB_ENV" | |
| - name: Build Docker image | |
| run: | | |
| DOCKERFILE="test/integration/docker/Dockerfile.echo.${{ matrix.distro_config.distro }}" | |
| TMPFILE=".scratch/Dockerfile.tmp" | |
| cp "$DOCKERFILE" "$TMPFILE" | |
| echo "COPY .scratch/${{ env.RIE_NAME }} /usr/bin/${{ env.RIE_NAME }}" >> "$TMPFILE" | |
| docker build . \ | |
| -f "$TMPFILE" \ | |
| -t ric-test \ | |
| --build-arg RUNTIME_VERSION=${{ matrix.distro_config.runtime_version }} \ | |
| --build-arg DISTRO_VERSION=${{ matrix.distro_config.distro_version }} | |
| - name: Run integration test | |
| run: | | |
| TEST_NAME="ric-integ-test" | |
| docker network create "${TEST_NAME}-net" | |
| # Start the Lambda function container with RIE | |
| docker run \ | |
| --detach \ | |
| --name "${TEST_NAME}-app" \ | |
| --network "${TEST_NAME}-net" \ | |
| --entrypoint="" \ | |
| ric-test \ | |
| sh -c "/usr/bin/${{ env.RIE_NAME }} ${{ matrix.distro_config.executable }} app.App::Handler.process" | |
| # Wait for RIE to be ready | |
| sleep 2 | |
| # Invoke the function | |
| docker run \ | |
| --name "${TEST_NAME}-tester" \ | |
| --env "TARGET=${TEST_NAME}-app" \ | |
| --network "${TEST_NAME}-net" \ | |
| --entrypoint="" \ | |
| ric-test \ | |
| sh -c 'curl -sS -X POST "http://${TARGET}:8080/2015-03-31/functions/function/invocations" -d "{}" --max-time 10' | |
| # Assert response | |
| ACTUAL="$(docker logs --tail 1 "${TEST_NAME}-tester" | xargs)" | |
| EXPECTED="success" | |
| echo "Response: ${ACTUAL}" | |
| if [ "$ACTUAL" != "$EXPECTED" ]; then | |
| echo "FAIL: ${{ matrix.distro_config.distro }}-${{ matrix.distro_config.distro_version }}:${{ matrix.distro_config.runtime_version }} — expected '${EXPECTED}', got '${ACTUAL}'" | |
| exit 1 | |
| fi | |
| echo "PASS" | |
| - name: Dump container logs | |
| if: always() | |
| run: | | |
| TEST_NAME="ric-integ-test" | |
| echo "=== App container logs ===" | |
| docker logs "${TEST_NAME}-app" 2>&1 || true | |
| echo "=== Tester container logs ===" | |
| docker logs "${TEST_NAME}-tester" 2>&1 || true | |
| - name: Cleanup | |
| if: always() | |
| run: | | |
| TEST_NAME="ric-integ-test" | |
| docker rm -f "${TEST_NAME}-app" "${TEST_NAME}-tester" 2>/dev/null || true | |
| docker network rm "${TEST_NAME}-net" 2>/dev/null || true |