diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..fd5e90c --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,139 @@ +--- +############### +## Run tests ## +############### + +# +# Documentation: +# https://help.github.com/en/articles/workflow-syntax-for-github-actions +# + +name: Test +on: + pull_request: + push: + branches: [ main ] + +########################## +# Prevent duplicate jobs # +########################## +concurrency: + group: ${{ github.repository }} + cancel-in-progress: false + +permissions: + id-token: write + contents: read + +############### +# Run the job # +############### +jobs: + self-test: + name: Testing + runs-on: ubuntu-latest + steps: + ############################ + # Checkout the source code # + ############################ + - name: Checkout + uses: actions/checkout@v4 + + ############################# + # Configure AWS credentials # + ############################# + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: arn:aws:iam::${{ vars.AWS_TESTING_ACCOUNT_ID }}:role/${{ vars.AWS_TESTING_ROLE }} + aws-region: ${{ vars.AWS_TESTING_REGION }} + mask-aws-account-id: false + + ###################### + # Test Action itself # + ###################### + - name: Test With Log Tail + uses: ./ + with: + # Pre created + cluster: github-gha + task-definition: arn:aws:ecs:${{ vars.AWS_TESTING_REGION }}:${{ vars.AWS_TESTING_ACCOUNT_ID }}:task-definition/github-gha-alpine + + assign-public-ip: 'ENABLED' + security-group-ids: | + sg-09a0ccb78d5be2a25 + subnet-ids: | + subnet-08bbfd6c53b0c1049 + subnet-0fef13a6bef01f61a + subnet-0a676289b4a27a7fa + + tail-logs: true + override-container: alpine + override-container-command: | + /bin/sh + -c + echo "Hello, World!" && \ + echo "$TEST_VAR" && \ + x=0; while [ $x -le 10 ]; do echo "Sleeping... $x" && x=$(( $x + 1 )) && sleep 2; done + override-container-environment: | + TEST_VAR=foobar123 + + ###################### + # Test Action itself # + ###################### + - name: Test Failure Exit Code + id: expect-fail + continue-on-error: true + uses: ./ + with: + # Pre created + cluster: github-gha + task-definition: arn:aws:ecs:${{ vars.AWS_TESTING_REGION }}:${{ vars.AWS_TESTING_ACCOUNT_ID }}:task-definition/github-gha-alpine + + assign-public-ip: 'ENABLED' + security-group-ids: | + sg-09a0ccb78d5be2a25 + subnet-ids: | + subnet-08bbfd6c53b0c1049 + subnet-0fef13a6bef01f61a + subnet-0a676289b4a27a7fa + + override-container: alpine + override-container-command: | + /bin/sh + -c + exit 1 + + ########################## + # Check expected failure # + ########################## + - name: Check previous for Failure + if: steps.expect-fail.outcome == 'success' + run: | + echo "Expected a failure. Outcome: ${{ steps.expect-fail.outcome }}" + exit 1 + + ###################### + # Test Action itself # + ###################### + - name: Test Fire and Forget + uses: ./ + with: + # Pre created + cluster: github-gha + task-definition: arn:aws:ecs:${{ vars.AWS_TESTING_REGION }}:${{ vars.AWS_TESTING_ACCOUNT_ID }}:task-definition/github-gha-alpine + + assign-public-ip: 'ENABLED' + security-group-ids: | + sg-09a0ccb78d5be2a25 + subnet-ids: | + subnet-08bbfd6c53b0c1049 + subnet-0fef13a6bef01f61a + subnet-0a676289b4a27a7fa + + task-wait-until-stopped: false + override-container: alpine + override-container-command: | + /bin/sh + -c + x=0; while [ $x -le 10 ]; do echo "Sleeping... $x" && x=$(( $x + 1 )) && sleep 10; done diff --git a/dist/index.js b/dist/index.js index e27179a..b37688c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -74003,12 +74003,16 @@ const main = async () => { core.setOutput('task-id', taskId); core.info(`Starting Task with ARN: ${taskArn}\n`); - // Wait for task to be in running state - core.debug(`Waiting for task to be in running state.`) - await waitUntilTasksRunning({ - client: ecs, - maxWaitTime: taskStartMaxWaitTime, - }, {cluster, tasks: [taskArn]}); + try { + core.debug(`Waiting for task to be in running state. Waiting for ${taskStartMaxWaitTime} seconds.`); + await waitUntilTasksRunning({ + client: ecs, + maxWaitTime: taskStartMaxWaitTime, + }, {cluster, tasks: [taskArn]}); + } catch (error) { + core.setFailed(`Task did not start successfully. Error: ${error.name}. State: ${error.state}.`); + return; + } // If taskWaitUntilStopped is false, we can bail out here because we can not tail logs or have any // information on the exitCodes or status of the task @@ -74070,15 +74074,18 @@ const main = async () => { } } - // Wait for Task to finish - core.debug(`Waiting for task to finish.`); - await waitUntilTasksStopped({ - client: ecs, - maxWaitTime: taskStoppedMaxWaitTime, - }, { - cluster, - tasks: [taskArn], - }); + try { + core.debug(`Waiting for task to finish. Waiting for ${taskStoppedMaxWaitTime} seconds.`); + await waitUntilTasksStopped({ + client: ecs, + maxWaitTime: taskStoppedMaxWaitTime, + }, { + cluster, + tasks: [taskArn], + }); + } catch (error) { + core.setFailed(`Task did not stop successfully. Error: ${error.name}. State: ${error.state}.`); + } // Close LogStream and store output if (logFilterStream !== null) { diff --git a/index.js b/index.js index 7c168db..e596a8d 100644 --- a/index.js +++ b/index.js @@ -105,12 +105,16 @@ const main = async () => { core.setOutput('task-id', taskId); core.info(`Starting Task with ARN: ${taskArn}\n`); - // Wait for task to be in running state - core.debug(`Waiting for task to be in running state.`) - await waitUntilTasksRunning({ - client: ecs, - maxWaitTime: taskStartMaxWaitTime, - }, {cluster, tasks: [taskArn]}); + try { + core.debug(`Waiting for task to be in running state. Waiting for ${taskStartMaxWaitTime} seconds.`); + await waitUntilTasksRunning({ + client: ecs, + maxWaitTime: taskStartMaxWaitTime, + }, {cluster, tasks: [taskArn]}); + } catch (error) { + core.setFailed(`Task did not start successfully. Error: ${error.name}. State: ${error.state}.`); + return; + } // If taskWaitUntilStopped is false, we can bail out here because we can not tail logs or have any // information on the exitCodes or status of the task @@ -172,15 +176,18 @@ const main = async () => { } } - // Wait for Task to finish - core.debug(`Waiting for task to finish.`); - await waitUntilTasksStopped({ - client: ecs, - maxWaitTime: taskStoppedMaxWaitTime, - }, { - cluster, - tasks: [taskArn], - }); + try { + core.debug(`Waiting for task to finish. Waiting for ${taskStoppedMaxWaitTime} seconds.`); + await waitUntilTasksStopped({ + client: ecs, + maxWaitTime: taskStoppedMaxWaitTime, + }, { + cluster, + tasks: [taskArn], + }); + } catch (error) { + core.setFailed(`Task did not stop successfully. Error: ${error.name}. State: ${error.state}.`); + } // Close LogStream and store output if (logFilterStream !== null) {