This is an automated email from the ASF dual-hosted git repository. vinoth pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hudi.git
The following commit(s) were added to refs/heads/master by this push: new f61cd10 [HUDI-985] Introduce rerun ci bot (#1693) f61cd10 is described below commit f61cd1086ae8014b2e1da129dccfe47b64116369 Author: lamber-ken <2217232...@qq.com> AuthorDate: Thu Jul 23 13:59:24 2020 +0800 [HUDI-985] Introduce rerun ci bot (#1693) * [HUDI-985] Introduce rerun ci bot * Implement bot using github-script * trigger rebuild --- .github/actions/bot/package.json | 36 ++++++++++++++ .github/actions/bot/src/action.js | 100 ++++++++++++++++++++++++++++++++++++++ .github/workflows/bot.yml | 43 ++++++++++++++++ .gitignore | 2 + 4 files changed, 181 insertions(+) diff --git a/.github/actions/bot/package.json b/.github/actions/bot/package.json new file mode 100644 index 0000000..0d6e9d1 --- /dev/null +++ b/.github/actions/bot/package.json @@ -0,0 +1,36 @@ +{ + "name": "github_action_ci_bot", + "version": "1.1.1", + "description": "CI Bot for GitHub Actions", + "main": "dist/index.js", + "scripts": { + "lint": "eslint 'src/**.js' 'tests/**.js' --fix", + "test": "eslint 'src/**.js' 'tests/**.js' && jest --coverage", + "build": "ncc build src/action.js" + }, + "author": "lamber-ken", + "license": "Apache LICENSE 2.0", + "homepage": "https://github.com/apache/hudi", + "bugs": { + "url": "https://github.com/apache/hudi/issues" + }, + "dependencies": { + "@actions/core": "^1.2.4", + "@actions/github": "^2.2.0", + "@actions/io": "^1.0.2" + }, + "devDependencies": { + "@types/jest": "^25.1.4", + "@typescript-eslint/eslint-plugin": "^2.33.0", + "@typescript-eslint/parser": "^2.33.0", + "@zeit/ncc": "^0.22.0", + "eslint": "^7.0.0", + "eslint-config-prettier": "^6.11.0", + "husky": "^4.2.5", + "jest": "^25.1.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.0.5", + "ts-jest": "^25.2.1", + "typescript": "^3.8.3" + } +} diff --git a/.github/actions/bot/src/action.js b/.github/actions/bot/src/action.js new file mode 100644 index 0000000..cb4f691 --- /dev/null +++ b/.github/actions/bot/src/action.js @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +async function check(core, context, github) { + + try { + const provider = process.env.PROVIDER; + const repository = process.env.REPOSITORY; + const command = context.payload.comment.body; + + if (command !== 'rerun tests') { + console.log("Invalid command:" + command); + return; + } + + const { + data: { + head: { + sha: ref, + } + } + } = await github.pulls.get({ + owner: provider, + repo: repository, + pull_number: context.issue.number, + }); + + const checks = await github.checks.listForRef({ + owner: provider, + repo: repository, + ref: ref + }); + + checks.data.check_runs.forEach(run => { + + if (run.app.owner.login === 'travis-ci') { + console.log("rerun travis ci check: " + run.external_id); + rebuild(run.external_id) + } else { + console.log("ignore github action check: " + run.id); + } + + }); + + } catch (e) { + console.log("check bot run failed: " + e); + } + +} + +function rebuild(buildId) { + const https = require('https'); + const token = process.env.HUDI_TRAVIS_ORG_TOKEN + + const options = { + hostname: 'api.travis-ci.org', + port: 443, + path: `/build/${buildId}/restart`, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Travis-API-Version': 3, + 'Authorization': `token ${token}`, + } + }; + + const req = https.request(options, function (res) { + res.setEncoding('utf8'); + res.on('data', function (data) { + console.log('data: ' + data); + }); + res.on('error', function (error) { + console.log('error: ' + error); + }); + }); + req.on('error', function (e) { + console.log('problem with request: ' + e.message); + }); + + req.end(); +} + +module.exports = ({core}, {context}, {github}) => { + return check(core, context, github); +} diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml new file mode 100644 index 0000000..ca34cc3 --- /dev/null +++ b/.github/workflows/bot.yml @@ -0,0 +1,43 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +name: CI BOT + +on: + issue_comment: + types: [created] + +jobs: + bot: + runs-on: ubuntu-latest + steps: + - name: clone repository + uses: actions/checkout@v2 + + - name: bot actions + uses: actions/github-script@v1 + env: + PROVIDER : 'apache' + REPOSITORY: 'hudi' + HUDI_TRAVIS_ORG_TOKEN: ${{ secrets.HUDI_TRAVIS_ORG_TOKEN }} + with: + script: | + const path = require('path') + const scriptPath = path.resolve('.github/actions/bot/src/action.js') + require(scriptPath)({core}, {context}, {github}) \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3437e2c..fcd673b 100644 --- a/.gitignore +++ b/.gitignore @@ -77,3 +77,5 @@ dependency-reduced-pom.xml # Docker ####################################### hudi-integ-test/compose_env +node_modules +package-lock.json \ No newline at end of file