diff --git a/.github/workflows/ci-actions.yml b/.github/workflows/ci-actions.yml index 2b729ecb..feb30c00 100644 --- a/.github/workflows/ci-actions.yml +++ b/.github/workflows/ci-actions.yml @@ -189,142 +189,3 @@ jobs: snapshot: false tags: "main" buildoptions: "--pull" - - test-container-images: - needs: [container-images] - runs-on: ubuntu-latest - strategy: - matrix: - os: [ubuntu-latest] - browser: [chrome, firefox] - services: - keycloak: - image: quay.io/keycloak/keycloak:12.0.2 - ports: - - 8180:8080 - env: - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - options: >- - --health-cmd "curl --fail http://localhost:8080/auth || exit 1" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - controls-db: - image: postgres:13.1 - ports: - - 5433:5432 - env: - POSTGRES_USER: user - POSTGRES_PASSWORD: password - POSTGRES_DB: controls_db - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - application-inventory-db: - image: postgres:13.1 - ports: - - 5434:5432 - env: - POSTGRES_USER: user - POSTGRES_PASSWORD: password - POSTGRES_DB: application_inventory_db - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - pathfinder-db: - image: postgres:13.1 - ports: - - 5435:5432 - env: - POSTGRES_USER: user - POSTGRES_PASSWORD: password - POSTGRES_DB: pathfinder_db - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - steps: - - uses: actions/checkout@v2 - - name: Keycloak Admin CLI - uses: carlosthe19916/keycloak-action@0.4 - with: - server: http://keycloak:8080/auth - username: admin - password: admin - kcadm: create realms -f konveyor-realm.json - - name: Controls API - run: | - docker run -d --name controls --network ${{ job.services.controls-db.network }} --network-alias controls -p 8081:8080 \ - -e QUARKUS_HTTP_PORT=8080 \ - -e QUARKUS_DATASOURCE_USERNAME=user \ - -e QUARKUS_DATASOURCE_PASSWORD=password \ - -e QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://controls-db:5432/controls_db \ - -e QUARKUS_OIDC_AUTH_SERVER_URL=http://keycloak:8080/auth/realms/konveyor \ - -e QUARKUS_OIDC_CLIENT_ID=controls-api \ - -e QUARKUS_OIDC_CREDENTIALS_SECRET=secret \ - quay.io/konveyor/tackle-controls:latest-native - sleep 5s && docker logs controls - - name: Application inventory API - run: | - docker run -d --name application-inventory --network ${{ job.services.application-inventory-db.network }} --network-alias application-inventory -p 8082:8080 \ - -e QUARKUS_HTTP_PORT=8080 \ - -e QUARKUS_DATASOURCE_USERNAME=user \ - -e QUARKUS_DATASOURCE_PASSWORD=password \ - -e QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://application-inventory-db:5432/application_inventory_db \ - -e QUARKUS_OIDC_AUTH_SERVER_URL=http://keycloak:8080/auth/realms/konveyor \ - -e QUARKUS_OIDC_CLIENT_ID=application-inventory-api \ - -e QUARKUS_OIDC_CREDENTIALS_SECRET=secret \ - -e IO_TACKLE_APPLICATIONINVENTORY_SERVICES_CONTROLS_SERVICE=controls:8080 \ - quay.io/konveyor/tackle-application-inventory:latest-native - sleep 5s && docker logs application-inventory - - name: Pathfinder API - run: | - docker run -d --name pathfinder --network ${{ job.services.pathfinder-db.network }} --network-alias pathfinder -p 8083:8080 \ - -e QUARKUS_HTTP_PORT=8080 \ - -e QUARKUS_DATASOURCE_USERNAME=user \ - -e QUARKUS_DATASOURCE_PASSWORD=password \ - -e QUARKUS_DATASOURCE_JDBC_URL=jdbc:postgresql://pathfinder-db:5432/pathfinder_db \ - -e QUARKUS_OIDC_AUTH_SERVER_URL=http://keycloak:8080/auth/realms/konveyor \ - -e QUARKUS_OIDC_CLIENT_ID=pathfinder-api \ - -e QUARKUS_OIDC_CREDENTIALS_SECRET=secret \ - quay.io/konveyor/tackle-pathfinder:latest-native - sleep 5s && docker logs pathfinder - - name: Tackle UI - run: | - docker run -d --name tackle-ui --network ${{ job.services.keycloak.network }} --network-alias tackle-ui -p 3000:8080 \ - -e SSO_REALM=konveyor \ - -e SSO_CLIENT_ID=tackle-ui \ - -e SSO_SERVER_URL=http://keycloak:8080/auth \ - -e CONTROLS_API_URL=http://controls:8080/controls \ - -e APPLICATION_INVENTORY_API_URL=http://application-inventory:8080/application-inventory \ - -e PATHFINDER_API_URL=http://pathfinder:8080/pathfinder \ - quay.io/konveyor/tackle-ui:main - sleep 5s && docker logs tackle-ui - - name: Cypress run - uses: cypress-io/github-action@v2 - with: - record: false - wait-on: "http://localhost:3000" - wait-on-timeout: 120 - config: pageLoadTimeout=100000 - browser: ${{ matrix.browser }} - spec: cypress/**/*.test.ts - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CYPRESS_auth_base_url: http://localhost:3000/auth - - uses: actions/upload-artifact@v1 - if: failure() - with: - name: container-screenshots-${{ matrix.os }}-${{ matrix.browser }} - path: cypress/screenshots - - uses: actions/upload-artifact@v1 - if: always() - with: - name: container-videos-${{ matrix.os }}-${{ matrix.browser }} - path: cypress/videos diff --git a/.github/workflows/pr-regresion-tests.yml b/.github/workflows/pr-regresion-tests.yml new file mode 100644 index 00000000..1326cebf --- /dev/null +++ b/.github/workflows/pr-regresion-tests.yml @@ -0,0 +1,129 @@ +name: Regresion tests + +on: + push: + branches-ignore: + - "dependabot/**" + paths-ignore: + - ".gitignore" + - "LICENSE" + - "*.md" + - ".github/ISSUE_TEMPLATE/**" + pull_request: + paths-ignore: + - ".gitignore" + - "LICENSE" + - "*.md" + - ".github/ISSUE_TEMPLATE/**" + +jobs: + container-image: + runs-on: ubuntu-latest + steps: + - name: Checkout tackle-ui + uses: actions/checkout@v2 + with: + path: tackle-ui + - name: Use Node.js + uses: actions/setup-node@v1 + with: + node-version: 12.x + - name: Build JS + run: | + yarn --cwd tackle-ui install + yarn --cwd tackle-ui build + - name: Build container image + run: docker build -t tackle/tackle-ui:current-pr tackle-ui + - name: Save container image + run: docker save -o tackle-ui.tar tackle/tackle-ui:current-pr + - name: Upload container image + uses: actions/upload-artifact@v2 + with: + name: tackle-ui + path: tackle-ui.tar + + k8s: + runs-on: ubuntu-latest + needs: [container-image] + strategy: + fail-fast: false + matrix: + tier: ["@tier1", "@tier2", "@tier3"] + steps: + - name: Download container image + uses: actions/download-artifact@v2 + with: + name: tackle-ui + path: . + - name: Load container image + run: docker load -i tackle-ui.tar + + - name: Checkout tackle + uses: actions/checkout@v2 + with: + repository: konveyor/tackle + path: tackle + - name: Checkout tackle-ui-tests + uses: actions/checkout@v2 + with: + repository: konveyor/tackle-ui-tests + path: tackle-ui-tests + ref: dev + - name: Setup Minikube + uses: manusa/actions-setup-minikube@v2.3.1 + with: + minikube version: v1.18.1 + kubernetes version: v1.20.2 + start args: "--addons=registry --addons=ingress" + - name: Validate Minikube + run: minikube status | grep Running + - name: Validate Cluster + run: kubectl get nodes + - name: Validate enabled addon in arg + run: minikube addons list -o json | jq '.registry.Status' | grep enabled + - name: Kubectl create namespace + run: kubectl create ns tackle + + - name: Deploy tackle + run: sleep 60s && kubectl create -f tackle/kubernetes/kubernetes-tackle.yaml -n tackle + + - name: Verify keycloak + run: kubectl wait deployment/keycloak --for condition=available --timeout=-1s -n tackle + - name: Verify tackle-controls + run: kubectl wait deployment/tackle-controls --for condition=available --timeout=-1s -n tackle + - name: Verify tackle-application-inventory + run: kubectl wait deployment/tackle-application-inventory --for condition=available --timeout=-1s -n tackle + - name: Verify tackle-pathfinder + run: kubectl wait deployment/tackle-pathfinder --for condition=available --timeout=-1s -n tackle + - name: Verify tackle-ui + run: kubectl wait deployment/tackle-ui --for condition=available --timeout=-1s -n tackle + + - name: Set custom tackle-ui + run: | + kubectl patch deployment tackle-ui --patch '{"spec":{"template":{"spec":{"containers":[{"name":"tackle-ui","imagePullPolicy":"Never"}]}}}}' -n tackle + kubectl set image deployment/tackle-ui tackle-ui=tackle/tackle-ui:current-pr -n tackle + kubectl wait deployment/tackle-ui --for condition=available --timeout=-1s -n tackle + + - name: Wait for Ingress + run: | + bash -c 'external_ip=""; + while [ -z $external_ip ]; + do echo "Waiting for end point..."; + external_ip=$(kubectl get ingress tackle --template="{{range .status.loadBalancer.ingress}}{{.ip}}{{end}}" -n tackle);[ -z "$external_ip" ] && + sleep 10; + done; + echo "End point ready:" && + echo $external_ip; + export endpoint=$external_ip; + echo "CYPRESS_tackleUrl=https://$external_ip" >>$GITHUB_ENV' + + - name: Cypress run + run: | + cd tackle-ui-tests + npm install . + npx cypress run --spec **/*.test.ts --env grepTags=${{ matrix.tier }},user=tackle,pass=password,tackleUrl=${{ env.CYPRESS_tackleUrl }} + - uses: actions/upload-artifact@v1 + if: failure() + with: + name: integration-tests-screenshots + path: tackle-ui-tests/cypress/screenshots