-
Notifications
You must be signed in to change notification settings - Fork 35
feat: use GitHub Action for base os testing #62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
983bbc6
9a8f6bb
35a6128
be4c053
973eb8d
d298b95
92e332b
5ed67b7
7d423f7
a4ea01e
261ddd6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,139 @@ | ||
| 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 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit. Have you considered caching docker layers. Maybe it could help a little bit. What is the running time for these tests?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 4min21: https://github.com/aws/aws-lambda-ruby-runtime-interface-client/actions/runs/24561650222 |
||
| 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 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -16,4 +16,5 @@ Gemfile.lock | |
| # containerized test runner clone | ||
| .test-runner/ | ||
|
|
||
| .vscode/ | ||
| .vscode/ | ||
| .scratch | ||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit. Have you considered caching the RIE?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes! but on a follow-up PR a want to add a trigger based on time: every workday. So it will run those workflow on a regular basis, if a new RIE is released, it will be picked up (and potentially fail the test, and our internal alarm will trigger). OK for you?