diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0f14d62..581adeb 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -15,12 +15,12 @@ defaults: working-directory: ./client on: push: - branches: [ master ] + branches: [master] pull_request: # The branches below must be a subset of the branches above - branches: [ master ] + branches: [master] schedule: - - cron: '19 3 * * 5' + - cron: "19 3 * * 5" jobs: analyze: @@ -34,47 +34,45 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'java', 'javascript' ] + language: ["java", "javascript"] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - - name: Checkout repository - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v2 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main - - name: Build with Maven - run: mvn -B -Pm2 clean verify --file pom.xml - working-directory: server - - - name: Build Client with yarn - uses: actions/setup-node@v2 - with: - node-version: '12' - - run: yarn install + - name: Build with Maven + run: mvn -B -Pm2 clean verify --file pom.xml + working-directory: server + - name: Build Client with yarn + uses: actions/setup-node@v2 + with: + node-version: "14" + - run: yarn install - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language - #- run: | - # make bootstrap - # make release + #- run: | + # make bootstrap + # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/Jenkinsfile b/Jenkinsfile index 0a765e6..02a0388 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ kind: Pod spec: containers: - name: ci - image: eclipseglsp/ci:alpine + image: eclipseglsp/ci:alpine-v3.1 tty: true resources: limits: @@ -59,6 +59,7 @@ pipeline { environment { YARN_CACHE_FOLDER = "${env.WORKSPACE}/yarn-cache" SPAWN_WRAP_SHIM_ROOT = "${env.WORKSPACE}" + EMAIL_TO= "glsp-build@eclipse.org" } stages { @@ -67,8 +68,14 @@ pipeline { container('ci') { timeout(30){ dir('client') { - sh 'yarn install --ignore-scripts' - sh 'yarn build' + sh "yarn install" + script { + // Fail the step if there are uncommited changes to the yarn.lock file + if (sh(returnStatus: true, script: 'git diff --name-only | grep -q "^yarn.lock"') == 0) { + echo 'The yarn.lock file has uncommited changes!' + error 'The yarn.lock file has uncommited changes!' + } + } } } } @@ -111,19 +118,40 @@ pipeline { expression { /* Only trigger the deployment job if the changeset contains changes in the `server` or `client/packages/` directory */ - sh(returnStatus: true, script: 'git diff --name-only HEAD^ | grep --quiet "^server\\|client/packages/"') == 0 + sh(returnStatus: true, script: 'git diff --name-only HEAD^ | grep -q "^server\\|client/packages/"') == 0 } } } - steps { - build job: 'deploy-p2-ide-integration', wait: true - build job: 'deploy-npm-ide-integration', wait: true + stages { + stage('Deploy client (NPM)') { + steps { + container('ci') { + timeout(30) { + dir(client) { + withCredentials([string(credentialsId: 'npmjs-token', variable: 'NPM_AUTH_TOKEN')]) { + sh 'printf "//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}\n" >> $WORKSPACE/.npmrc' + } + sh 'git config user.email "eclipse-glsp-bot@eclipse.org"' + sh 'git config user.name "eclipse-glsp-bot"' + sh 'yarn publish:next' + } + } + } + } + } + stage('Deploy server (P2)') { + steps { + timeout(30){ + build job: 'deploy-p2-ide-integration', wait: true + } + } + } } } } post{ - always{ + success{ container('ci') { // Record & publish checkstyle issues @@ -140,5 +168,38 @@ pipeline { qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]] } } + failure { + script { + if (env.BRANCH_NAME == 'master') { + echo "Build result FAILURE: Send email notification to ${EMAIL_TO}" + emailext attachLog: true, + from: 'glsp-bot@eclipse.org', + body: 'Job: ${JOB_NAME}
Build Number: ${BUILD_NUMBER}
Build URL: ${BUILD_URL}', + mimeType: 'text/html', subject: 'Build ${JOB_NAME} (#${BUILD_NUMBER}) FAILURE', to: "${EMAIL_TO}" + } + } + } + unstable { + script { + if (env.BRANCH_NAME == 'master') { + echo "Build result UNSTABLE: Send email notification to ${EMAIL_TO}" + emailext attachLog: true, + from: 'glsp-bot@eclipse.org', + body: 'Job: ${JOB_NAME}
Build Number: ${BUILD_NUMBER}
Build URL: ${BUILD_URL}', + mimeType: 'text/html', subject: 'Build ${JOB_NAME} (#${BUILD_NUMBER}) UNSTABLE', to: "${EMAIL_TO}" + } + } + } + fixed { + script { + if (env.BRANCH_NAME == 'master') { + echo "Build back to normal: Send email notification to ${EMAIL_TO}" + emailext attachLog: false, + from: 'glsp-bot@eclipse.org', + body: 'Job: ${JOB_NAME}
Build Number: ${BUILD_NUMBER}
Build URL: ${BUILD_URL}', + mimeType: 'text/html', subject: 'Build ${JOB_NAME} back to normal (#${BUILD_NUMBER})', to: "${EMAIL_TO}" + } + } + } } } diff --git a/README.md b/README.md index 6861470..6ff33e8 100755 --- a/README.md +++ b/README.md @@ -1,8 +1,4 @@ -# Eclipse GLSP Eclipse IDE Integration - -[![build-status](https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fci.eclipse.org%2Fglsp%2Fjob%2Feclipse-glsp%2Fjob%2Fglsp-eclipse-integration%2Fjob%2Fmaster%2F)](https://ci.eclipse.org/glsp/job/eclipse-glsp/job/glsp-eclipse-integration/) -[![publish-status-npm](https://img.shields.io/jenkins/build?jobUrl=https://ci.eclipse.org/glsp/job/deploy-npm-ide-integration/&label=npm)](https://ci.eclipse.org/glsp/job/deploy-npm-ide-integration/) -[![publish-status-p2](https://img.shields.io/jenkins/build?jobUrl=https://ci.eclipse.org/glsp/job/deploy-p2-ide-integration/&label=p2)](https://ci.eclipse.org/glsp/job/deploy-p2-ide-integration/) +# Eclipse GLSP Eclipse IDE Integration [![build-status](https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fci.eclipse.org%2Fglsp%2Fjob%2Feclipse-glsp%2Fjob%2Fglsp-eclipse-integration%2Fjob%2Fmaster%2F)](https://ci.eclipse.org/glsp/job/eclipse-glsp/job/glsp-eclipse-integration/) [![publish-status-p2](https://img.shields.io/jenkins/build?jobUrl=https://ci.eclipse.org/glsp/job/deploy-p2-ide-integration/&label=p2)](https://ci.eclipse.org/glsp/job/deploy-p2-ide-integration/) Contains the glue code for opening browser-based GLSP diagrams in an Eclipse IDE Editor diff --git a/client/.gitignore b/client/.gitignore index c560541..e5af2e5 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -6,4 +6,5 @@ lib *.log *.ttf -tsconfig.tsbuildinfo \ No newline at end of file +tsconfig.tsbuildinfo +eslint.xml diff --git a/client/examples/workflow-webapp/package.json b/client/examples/workflow-webapp/package.json index ccf6452..f1d7910 100644 --- a/client/examples/workflow-webapp/package.json +++ b/client/examples/workflow-webapp/package.json @@ -20,11 +20,13 @@ "webpack-cli": "^4.9.1" }, "scripts": { - "prepare": "yarn clean && yarn build && yarn lint", + "build": "tsc -b", "clean": "rimraf lib tsconfig.tsbuildinfo app/bundle.js app/bundle.js.map", - "build": "tsc && webpack", "lint": "eslint --ext .ts,.tsx ./src", - "lint:fix": "eslint --fix --ext .ts,.tsx ./src", + "lint:ci": "yarn lint -o eslint.xml -f checkstyle", + "prepare": "yarn clean && yarn build", + "test": "mocha --config ../../.mocharc.json \"./src/**/*.spec.?(ts|tsx)\"", + "test:ci": "export JUNIT_REPORT_PATH=./report.xml && yarn test --reporter mocha-jenkins-reporter", "watch": "tsc -w" } } diff --git a/client/package.json b/client/package.json index dafa7d8..ab20801 100644 --- a/client/package.json +++ b/client/package.json @@ -3,28 +3,31 @@ "name": "parent", "version": "1.1.0-next", "engines": { - "yarn": ">=1.7.0 <2.x.x" + "yarn": ">=1.7.0 <2.x.x", + "node": ">=14.18.0" }, "devDependencies": { - "@eclipse-glsp/config": "next", - "@types/node": "12.x", + "@eclipse-glsp/config": "1.1.0-next.d03ad9f.112", + "@types/node": "14", "copyfiles": "^2.4.1", "lerna": "^4.0.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "typescript": "^4.4.5" + "typescript": "^4.9.3" }, "scripts": { - "prepare": "lerna run prepare && yarn copyClient", - "install:only": "yarn install --ignore-scripts", - "watch": "lerna run --parallel watch", - "build": "lerna run build", - "lint": "lerna run lint --", + "all": "yarn install && yarn lint", + "build": "lerna run build && yarn copy:client", + "clean": "lerna run clean", "copyClient": "copyfiles -f ./examples/workflow-webapp/app/* ../server/example/org.eclipse.glsp.ide.workflow.editor/diagram", + "lint": "lerna run lint", + "lint:ci": "lerna run lint:ci", + "prepare": "lerna run prepare && yarn copy:client", "publish:prepare": "lerna version --ignore-scripts --yes --no-push", "publish:latest": "lerna publish from-git --no-git-reset --no-git-tag-version --no-verify-access --no-push", "publish:next": "SHA=$(git rev-parse --short HEAD) && lerna publish preminor --exact --canary --preid next.${SHA} --dist-tag next --no-git-reset --no-git-tag-version --no-push --ignore-scripts --yes --no-verify-access", - "upgrade:next": "yarn upgrade -p \"@eclipse-glsp.*|sprotty\" --next " + "upgrade:next": "yarn upgrade -p \"@eclipse-glsp.*|sprotty.*\" --next ", + "watch": "lerna run --parallel watch" }, "workspaces": [ "packages/*", diff --git a/client/packages/ide/package.json b/client/packages/ide/package.json index 28f3230..925048d 100644 --- a/client/packages/ide/package.json +++ b/client/packages/ide/package.json @@ -30,11 +30,11 @@ "@eclipse-glsp/client": "next" }, "scripts": { - "prepare": "yarn clean && yarn build && yarn lint", + "build": "tsc -b", "clean": "rimraf lib tsconfig.tsbuildinfo ", - "build": "tsc", "lint": "eslint --ext .ts,.tsx ./src", - "lint:fix": "eslint --fix --ext .ts,.tsx ./src", + "lint:ci": "yarn lint -o eslint.xml -f checkstyle", + "prepare": "yarn clean && yarn build", "watch": "tsc -w" }, "publishConfig": {