Quellcode durchsuchen

GitHub Actions jobs for testing (#184)

* added jobs for perform UI testing

* get rid of Jenkinsfile

* use unique match key for each job
Rustam Gimadiev vor 4 Jahren
Ursprung
Commit
92c0332cb1
4 geänderte Dateien mit 72 neuen und 279 gelöschten Zeilen
  1. 4 3
      .github/workflows/backend.yml
  2. 67 0
      .github/workflows/frontend.yaml
  3. 1 1
      .github/workflows/release.yaml
  4. 0 275
      Jenkinsfile

+ 4 - 3
.github/workflows/backend.yml

@@ -5,15 +5,16 @@ on:
   pull_request:
   pull_request:
     branches: [ master ]
     branches: [ master ]
 jobs:
 jobs:
-  build:
+  mvn-all-build:
     runs-on: ubuntu-latest
     runs-on: ubuntu-latest
     steps:
     steps:
     - name: Cache local Maven repository
     - name: Cache local Maven repository
-      uses: actions/cache@v2
+      uses: actions/cache@v1
       with:
       with:
         path: ~/.m2/repository
         path: ~/.m2/repository
-        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+        key: ${{ runner.os }}-maven-all-${{ hashFiles('**/pom.xml') }}
         restore-keys: |
         restore-keys: |
+          ${{ runner.os }}-maven-all-
           ${{ runner.os }}-maven-
           ${{ runner.os }}-maven-
     - uses: actions/checkout@v2
     - uses: actions/checkout@v2
     - name: Set up JDK 1.13
     - name: Set up JDK 1.13

+ 67 - 0
.github/workflows/frontend.yaml

@@ -0,0 +1,67 @@
+name: frontend
+on:
+  push:
+    branches: [ '*' ]
+  pull_request:
+    branches: [ master ]
+jobs:
+  npm-test:
+    needs: [mvn-contract-build]
+    env:
+      CI: true
+      NODE_ENV: dev
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+    - name: Use Node.js
+      uses: actions/setup-node@v1
+      with:
+        node-version: "14"
+    - uses: actions/download-artifact@v2
+      with:
+        name: generated-sources
+        path: kafka-ui-react-app/src/generated-sources
+    - name: Cache node dependency
+      uses: actions/cache@v1
+      with:
+        path: kafka-ui-react-app/node_modules
+        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
+        restore-keys: |
+          ${{ runner.os }}-node-
+    - name: Install Node dependencies
+      run: |
+        cd kafka-ui-react-app/
+        npm install
+    - name: Linter
+      run: |
+        cd kafka-ui-react-app/
+        npm run lint
+    - name: Tests
+      run: |
+        cd kafka-ui-react-app/
+        npm run test
+
+  mvn-contract-build:
+    runs-on: ubuntu-latest
+    steps:
+    - name: Cache local Maven repository
+      uses: actions/cache@v1
+      with:
+        path: ~/.m2/repository
+        key: ${{ runner.os }}-maven-contract-${{ hashFiles('**/pom.xml') }}
+        restore-keys: |
+          ${{ runner.os }}-maven-contract-
+          ${{ runner.os }}-maven-
+    - uses: actions/checkout@v2
+    - name: Set up JDK 1.13
+      uses: actions/setup-java@v1
+      with:
+        java-version: 1.13
+    - name: Build with Maven
+      run: |
+        cd kafka-ui-contract
+        mvn clean package
+    - uses: actions/upload-artifact@v2
+      with:
+        name: generated-sources
+        path: kafka-ui-contract/target/generated-sources/frontend

+ 1 - 1
.github/workflows/release.yaml

@@ -74,4 +74,4 @@ jobs:
           build-args: |
           build-args: |
             JAR_FILE=kafka-ui-api-${{ steps.prep.outputs.version }}.jar
             JAR_FILE=kafka-ui-api-${{ steps.prep.outputs.version }}.jar
           cache-from: type=local,src=/tmp/.buildx-cache
           cache-from: type=local,src=/tmp/.buildx-cache
-          cache-to: type=local,dest=/tmp/.buildx-cache
+          cache-to: type=local,dest=/tmp/.buildx-cache

+ 0 - 275
Jenkinsfile

@@ -1,275 +0,0 @@
-def VERSION
-
-pipeline {
-    options {
-        disableConcurrentBuilds()
-    }
-
-    tools {
-        maven 'mvn_3.6.3'
-    }
-
-    environment {
-        registry = "provectuslabs/kafka-ui"
-        registryCredential = 'docker-hub-credentials'
-    }
-
-    agent {
-        kubernetes {
-            label 'kafka-ui'
-            yaml '''
-apiVersion: v1
-kind: Pod
-spec:
-  containers:
-  - name: node
-    image: node:14
-    command:
-    - sleep
-    args:
-    - 99d
-    env:
-      - name: NODE_ENV
-        value: dev
-      - name: CI
-        value: true
-  - name: docker-client
-    image: docker:19.03.1
-    command:
-    - sleep
-    args:
-    - 99d
-    env:
-      - name: DOCKER_HOST
-        value: tcp://localhost:2375
-    volumeMounts:
-      - name: cache
-        mountPath: /tmp/repository
-  - name: docker-daemon
-    resources:
-      limits:
-        memory: "2048Mi"
-        cpu: "1000m"
-      requests:
-        memory: "1024Mi"
-        cpu: "500m"
-    image: docker:19.03.1-dind
-    securityContext:
-      privileged: true
-    env:
-      - name: DOCKER_TLS_CERTDIR
-        value: ""
-    volumeMounts:
-      - name: cache
-        mountPath: /var/lib/docker
-  volumes:
-    - name: cache
-      hostPath:
-        path: /tmp
-        type: Directory
-'''
-        }
-    }
-    stages {
-        stage('Checkout release branch') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                sh 'git checkout -b release'
-            }
-        }
-        stage('Merge to release branch') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                sh 'git merge origin/master'
-            }
-        }
-        stage('Preparations for testing') {
-            when {
-                anyOf {
-                    changeRequest ()
-                    expression { return env.GIT_BRANCH ==~ /.*master$/; }
-                }
-            }
-            parallel {
-                stage('Contracts generation') {
-                    steps {
-                        container('docker-client') {
-                            sh '''
-                            docker run -v $WORKSPACE:/usr/src/mymaven -v /tmp/repository:/root/.m2/repository -w /usr/src/mymaven/kafka-ui-contract maven:3.6.3-jdk-13 bash -c 'mvn -q package'
-                            '''
-                        }
-                    }
-                }
-                stage('NPM initialization') {
-                    steps {
-                        container('node') {
-                            sh '''
-                            cd kafka-ui-react-app
-                            npm install
-                            '''
-                        }
-                    }
-                }
-            }
-        }
-        stage('UI testing') {
-            when {
-                anyOf {
-                    changeRequest ()
-                    expression { return env.GIT_BRANCH ==~ /.*master$/; }
-                }
-            }
-            parallel {
-                stage('Tests') {
-                    steps {
-                        container('node') {
-                            sh '''
-                            cd kafka-ui-react-app
-                            npm run test
-                            '''
-                        }
-                    }
-                }
-                stage('Linter') {
-                    steps {
-                        container('node') {
-                            sh '''
-                            cd kafka-ui-react-app
-                            npm run lint
-                            '''
-                        }
-                    }
-                }
-            }
-        }
-        stage('Remove SNAPSHOT from version') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                container('docker-client') {
-                    sh "docker run -v $WORKSPACE:/usr/src/mymaven -v /tmp/repository:/root/.m2/repository -w /usr/src/mymaven maven:3.6.3-jdk-13 bash -c 'mvn versions:set -DremoveSnapshot'"
-                }
-            }
-        }
-        stage('Get version from pom.xml') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                script {
-                    pom = readMavenPom file: 'pom.xml'
-                    VERSION = pom.version
-                }
-            }
-        }
-        stage('Build artifact') {
-            when {
-                anyOf {
-                    changeRequest ()
-                    expression { return env.GIT_BRANCH ==~ /.*master$/; }
-                }
-            }
-            steps {
-                container('docker-client') {
-                    sh "docker run -v /var/run/docker.sock:/var/run/docker.sock -v $WORKSPACE:/usr/src/mymaven -v /tmp/repository:/root/.m2/repository -w /usr/src/mymaven provectuslabs/openjdk:13 bash -c 'chown -R \$(whoami):\$(whoami) kafka-ui-react-app && ./mvnw clean package -Pprod'"
-                }
-            }
-        }
-        stage('Build docker image') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                container('docker-client') {
-                    dir(path: './kafka-ui-api') {
-                        script {
-                            dockerImage = docker.build( registry + ":$VERSION", "--build-arg JAR_FILE=kafka-ui-api-\'$VERSION\'.jar -f Dockerfile ." )
-                        }
-                    }
-                }
-            }
-        }
-        stage('Publish docker image') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                container('docker-client') {
-                    script {
-                        docker.withRegistry( '', registryCredential ) {
-                            dockerImage.push()
-                            dockerImage.push('latest')
-                        }
-                    }
-                }
-            }
-        }
-        stage('Remove unused docker image') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps{
-                container('docker-client') {
-                    sh "docker rmi $registry:$VERSION"
-                }
-            }
-        }
-        stage('Create github release with text from commits') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                script {
-                    withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
-                        sh "bash -x release_json.sh v$VERSION"
-                        sh "git tag -f v$VERSION"
-                        sh "git push -f --tags https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git"
-                        sh "curl -XPOST -u $GIT_USER:$GIT_PASSWORD --data @/tmp/release.json https://api.github.com/repos/provectus/kafka-ui/releases"
-                    }
-                }
-            }
-        }
-        stage('Checkout master') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                sh 'git checkout master'
-            }
-        }
-        stage('Increase version in master') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                container('docker-client') {
-                    sh "docker run -v $WORKSPACE:/usr/src/mymaven -v /tmp/repository:/root/.m2/repository -w /usr/src/mymaven maven:3.6.3-jdk-13 bash -c 'mvn build-helper:parse-version versions:set -DnewVersion=\\\${parsedVersion.majorVersion}.\\\${parsedVersion.minorVersion}.\\\${parsedVersion.nextIncrementalVersion}-SNAPSHOT versions:commit'"
-                }
-            }
-        }
-        stage('Push to master') {
-            when {
-                expression { return env.GIT_BRANCH ==~ /.*master$/; }
-            }
-            steps {
-                script {
-                    withCredentials([usernamePassword(credentialsId: 'github-jenkins-internal-provectus', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USER')]) {
-                        sh "git add ."
-                        sh "git -c user.name=\"$GIT_USER\" -c user.email=\"no-reply@jenkins.provectus.com\" commit -m \"Increased version in pom.xml\""
-                        sh "git push https://$GIT_USER:$GIT_PASSWORD@github.com/provectus/kafka-ui.git HEAD:master"
-                    }
-                }
-            }
-        }
-    }
-    post {
-        always {
-            cleanWs()
-        }
-    }
-}