Skip to content
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

Tests and coverage #232

Merged
merged 9 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 81 additions & 84 deletions .github/workflows/ci.yml → .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Docker Image CI
name: PR Build

on:
push:
Expand All @@ -23,8 +23,6 @@ on:
jobs:
build-context:
runs-on: ubuntu-latest
outputs:
push_image: ${{ (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')) || (github.event_name == 'release' && github.event.action == 'published') }}
steps:
- name: Dump GitHub context
env:
Expand All @@ -37,14 +35,14 @@ jobs:
PLATFORMS: "linux/amd64,linux/arm64"
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Env seen prerun
run: env

- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v5.2
uses: tj-actions/branch-names@v8

- name: Current branch name
run: |
Expand Down Expand Up @@ -79,20 +77,13 @@ jobs:
# setup Docker build action
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- name: Set up QEMU
id: qemu
uses: docker/setup-qemu-action@v2

- name: Login to DockerHub
if: needs.build-context.outputs.push_image == 'true'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
uses: docker/setup-qemu-action@v3

- name: Build crapi-identity image
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: ./services/identity
tags: crapi/crapi-identity:${{ env.TAG_LATEST }},crapi/crapi-identity:${{ env.TAG_NAME }}
Expand All @@ -103,7 +94,7 @@ jobs:
cache-to: type=gha,mode=max,scope=identity-service

- name: Build crapi-workshop image
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: ./services/workshop
tags: crapi/crapi-workshop:${{ env.TAG_LATEST }},crapi/crapi-workshop:${{ env.TAG_NAME }}
Expand All @@ -114,7 +105,7 @@ jobs:
cache-to: type=gha,mode=max,scope=workshop-service

- name: Build crapi-community image
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: ./services/community
tags: crapi/crapi-community:${{ env.TAG_LATEST }},crapi/crapi-community:${{ env.TAG_NAME }}
Expand All @@ -125,7 +116,7 @@ jobs:
cache-to: type=gha,mode=max,scope=community-service

- name: Build crapi-web image
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: ./services/web
tags: crapi/crapi-web:${{ env.TAG_LATEST }},crapi/crapi-web:${{ env.TAG_NAME }}
Expand All @@ -136,7 +127,7 @@ jobs:
cache-to: type=gha,mode=max,scope=web-service

- name: Build gateway-service image
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: ./services/gateway-service
tags: crapi/gateway-service:${{ env.TAG_LATEST }},crapi/gateway-service:${{ env.TAG_NAME }}
Expand All @@ -146,16 +137,8 @@ jobs:
cache-from: type=gha,scope=gateway-service
cache-to: type=gha,mode=max,scope=gateway-service


- name: Check Mailhog existence
id: check_mailhog_exists
uses: andstor/file-existence-action@v1
with:
files: "./services/mailhog"

- name: Build mailhog image
if: steps.check_mailhog_exists.outputs.files_exists == 'true'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: ./services/mailhog
tags: crapi/mailhog:${{ env.TAG_LATEST }},crapi/mailhog:${{ env.TAG_NAME }}
Expand All @@ -177,76 +160,90 @@ jobs:
- name: Install Node
uses: actions/setup-node@v3
with:
node-version: 16
node-version: 20

- name: Install newman
run: npm install -g newman

- name: Run Postman Collection
run: (newman run "./postman_collections/crAPI.postman_collection.json" -e ./postman_collections/crAPI.postman_environment.json --verbose) || true

- name: Build crapi-identity all platforms and conditionally push to Docker Hub
uses: docker/build-push-action@v2
with:
context: ./services/identity
tags: crapi/crapi-identity:${{ env.TAG_LATEST }},crapi/crapi-identity:${{ env.TAG_NAME }}
push: ${{ needs.build-context.outputs.push_image }}
platforms: ${{ env.PLATFORMS }}
cache-from: type=gha,scope=identity-service
cache-to: type=gha,mode=max,scope=identity-service
- name: Dump docker logs on failure
if: failure()
uses: jwalton/gh-docker-logs@v2

- name: Build crapi-workshop all platforms and conditionally push to Docker Hub
uses: docker/build-push-action@v2
with:
context: ./services/workshop
tags: crapi/crapi-workshop:${{ env.TAG_LATEST }},crapi/crapi-workshop:${{ env.TAG_NAME }}
push: ${{ needs.build-context.outputs.push_image }}
platforms: ${{ env.PLATFORMS }}
cache-from: type=gha,scope=workshop-service
cache-to: type=gha,mode=max,scope=workshop-service
- name: Run crAPI using built images
run: docker-compose -f deploy/docker/docker-compose.yml down --volumes --remove-orphans

- name: Build crapi-community all platforms and conditionally push to Docker Hub
uses: docker/build-push-action@v2
with:
context: ./services/community
tags: crapi/crapi-community:${{ env.TAG_LATEST }},crapi/crapi-community:${{ env.TAG_NAME }}
push: ${{ needs.build-context.outputs.push_image }}
platforms: ${{ env.PLATFORMS }}
cache-from: type=gha,scope=community-service
cache-to: type=gha,mode=max,scope=community-service

- name: Build crapi-web all platforms and conditionally push to Docker Hub
uses: docker/build-push-action@v2
tests:
needs: build-context
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
context: ./services/web
tags: crapi/crapi-web:${{ env.TAG_LATEST }},crapi/crapi-web:${{ env.TAG_NAME }}
push: ${{ needs.build-context.outputs.push_image }}
platforms: ${{ env.PLATFORMS }}
cache-from: type=gha,scope=web-service
cache-to: type=gha,mode=max,scope=web-service
python-version: '3.10'

- name: Build gateway-service all platforms and conditionally push to Docker Hub
uses: docker/build-push-action@v2
- name: Setup Java
uses: actions/setup-java@v4
with:
context: ./services/gateway-service
tags: crapi/gateway-service:${{ env.TAG_LATEST }},crapi/gateway-service:${{ env.TAG_NAME }}
push: ${{ needs.build-context.outputs.push_image }}
platforms: ${{ env.PLATFORMS }}
cache-from: type=gha,scope=gateway-service
cache-to: type=gha,mode=max,scope=gateway-service
distribution: 'adopt'
java-version: '11'

- name: Build mailhog all platforms and conditionally push to Docker Hub
if: steps.check_mailhog_exists.outputs.files_exists == 'true'
uses: docker/build-push-action@v2
- name: Setup Go
uses: actions/setup-go@v5
with:
context: ./services/mailhog
tags: crapi/mailhog:${{ env.TAG_LATEST }},crapi/mailhog:${{ env.TAG_NAME }}
push: ${{ needs.build-context.outputs.push_image }}
platforms: ${{ env.PLATFORMS }}
cache-from: type=gha,scope=mailhog-service
cache-to: type=gha,mode=max,scope=mailhog-service
go-version: '1.21'

- name: Dump docker logs on failure
if: failure()
uses: jwalton/gh-docker-logs@v2
- name: Start the database
run: docker-compose -f services/docker-database.yml up -d

- name: Run identity tests
run: |
cd services/identity
./gradlew test

- name: Run community tests
run: |
cd services/community
go test -v ./...
mkdir test-results
go run gotest.tools/gotestsum@latest --format testname --junitfile test-results/unit-tests.xml

- name: Run workshop tests
run: |
cd services/workshop
pip3 install virtualenv
virtualenv venv
source venv/bin/activate
pip3 install -r requirements.txt
mkdir -p test-results
source .env
IS_TESTING=True python3 manage.py test --no-input --testrunner xmlrunner.extra.djangotestrunner.XMLTestRunner

- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: |
**/test-results/**/*.xml
**/test-results/**/*.json

- name: Run workshop coverage
run: |
cd services/workshop
source venv/bin/activate
source .env
IS_TESTING=True coverage run ./manage.py test --no-input crapi
coverage report
coverage xml -o coverage.xml

- name: Publish Coverage for workshop
uses: orgoro/coverage@v3.1
with:
coverageFile: services/workshop/coverage.xml
token: ${{ secrets.GITHUB_TOKEN }}
Loading
Loading