# https://help.github.com/en/categories/automating-your-workflow-with-github-actions name: "End to end tests" on: push: branches: - master - develop pull_request: jobs: start-runner: if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false) name: Start self-hosted EC2 runner runs-on: ubuntu-latest outputs: label: ${{ steps.start-ec2-runner.outputs.label }} ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }} steps: - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} - name: Start EC2 runner id: start-ec2-runner uses: machulav/ec2-github-runner@v2 with: mode: start github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} ec2-image-id: ami-094dbcc53250a2480 ec2-instance-type: m5.2xlarge subnet-id: subnet-0ac40025f559df1bc security-group-id: sg-0e36e96e3b8ed2d64 #iam-role-name: my-role-name # optional, requires additional permissions #aws-resource-tags: > # optional, requires additional permissions # [ # {"Key": "Name", "Value": "ec2-github-runner"}, # {"Key": "GitHubRepository", "Value": "${{ github.repository }}"} # ] end-to-end-tests: name: "End-to-end testcafe tests" needs: start-runner # required to start the main job when the runner is ready runs-on: ${{ needs.start-runner.outputs.label }} # run the job on the newly created runner steps: - name: "Checkout" uses: "actions/checkout@v2.0.0" - name: "Setup NodeJS" uses: actions/setup-node@v1 with: node-version: '14.x' - name: "Install dependencies" run: npm install working-directory: "tests" - name: "Setup .env file" run: cp .env.template .env - name: "Edit ownership of file for test cases" run: sudo chown 1000:1000 -R . - name: "Start environment" run: LIVE_RELOAD=0 docker-compose up -d - name: "Wait for environment to build (and downloading testcafe image)" run: (docker-compose -f docker-compose.testcafe.yml build &) && docker-compose logs -f --tail=0 front | grep -q "Compiled successfully" # - name: "temp debug: display logs" # run: docker-compose logs # # - name: "Wait for back start" # run: docker-compose logs -f back | grep -q "WorkAdventure HTTP API starting on port" # # - name: "Wait for pusher start" # run: docker-compose logs -f pusher | grep -q "WorkAdventure starting on port" - name: "Run tests" run: PROJECT_DIR=$(pwd) docker-compose -f docker-compose.testcafe.yml up --exit-code-from testcafe - name: Upload failed tests if: ${{ failure() }} uses: actions/upload-artifact@v2 with: name: my-artifact path: './tests/screenshots/' - name: Display state if: ${{ failure() }} run: docker-compose ps - name: Display logs if: ${{ failure() }} run: docker-compose logs stop-runner: name: Stop self-hosted EC2 runner needs: - start-runner # required to get output from the start-runner job - end-to-end-tests # required to wait when the main job is done runs-on: ubuntu-latest if: ${{ always() }} # required to stop the runner even if the error happened in the previous jobs steps: - name: Configure AWS credentials if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false) uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} - name: Stop EC2 runner if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false) uses: machulav/ec2-github-runner@v2 with: mode: stop github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} label: ${{ needs.start-runner.outputs.label }} ec2-instance-id: ${{ needs.start-runner.outputs.ec2-instance-id }}