Github Actions does not provide big enough VMs for E2E tests. So we need to spin our own instances on AWS. But we cannot share the credentials with the forks for obvious security reasons. We therefore need to completely disable E2E tests for forks :(
126 lines
4.5 KiB
YAML
126 lines
4.5 KiB
YAML
# 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: t3.xlarge
|
|
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 }}
|