feat: add libvpl and libvpl-tools #2905
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: auto create repo | |
| on: | |
| pull_request_target: | |
| types: [opened, synchronize, closed] | |
| paths: | |
| - "repos.yml" | |
| env: | |
| APP_ID: ${{ secrets.APP_ID }} | |
| APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} | |
| OSCPASS: ${{ secrets.OSCPASS }} | |
| jobs: | |
| create_repo: | |
| if: github.event.pull_request.merged | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v2 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| persist-credentials: false | |
| - name: use node@18 | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 18 | |
| - name: install depends for load scripts | |
| run: | | |
| npm install @octokit/rest@19.0.13 | |
| npm install @octokit/auth-app@6.1.1 | |
| - name: Get token using github-script | |
| id: get-token | |
| uses: actions/github-script@v6 | |
| with: | |
| script: | | |
| global["fetch"] = fetch | |
| const { Octokit } = require("@octokit/rest"); | |
| const { createAppAuth } = require("@octokit/auth-app"); | |
| const appOctokit = new Octokit({ | |
| authStrategy: createAppAuth, | |
| auth: { | |
| appId: process.env.APP_ID, | |
| privateKey: process.env.APP_PRIVATE_KEY, | |
| } | |
| }); | |
| const app_installation = await appOctokit.rest.apps.getRepoInstallation({ | |
| owner: context.payload.organization.login, | |
| repo: context.payload.repository.name | |
| }); | |
| const { token } = await appOctokit.auth({ | |
| type: "installation", | |
| installationId: app_installation.data.id | |
| }); | |
| core.setOutput('app_token', token) | |
| - name: create_repo | |
| id: create_repo | |
| shell: python | |
| env: | |
| GITHUB_TOKEN: ${{ steps.get-token.outputs.app_token }} | |
| CHANGE_ID: ${{ github.event.pull_request.number }} | |
| ORG: ${{ github.repository_owner }} | |
| run: | | |
| import requests | |
| import yaml | |
| import os | |
| import logging | |
| header = { | |
| "Accept": "application/vnd.github+json", | |
| "Authorization":"Bearer " + os.environ.get("GITHUB_TOKEN") | |
| } | |
| header1 = { | |
| "Accept": "application/vnd.github.v3.diff" | |
| } | |
| create_repo_url = "https://api.github.com/repos/" + os.environ.get("ORG") + "/template-repository/generate" | |
| def set_output(name, value): | |
| output_file = os.environ.get("GITHUB_OUTPUT") | |
| with open(output_file, "w") as output: | |
| output.write(name + "=" + value + "\n") | |
| def get_pr_diff(): | |
| res = requests.get("https://api.github.com/repos/" + os.environ.get("ORG") + "/Repository-Manager/pulls/" + os.environ.get("CHANGE_ID") ,headers = header1) | |
| data = res.text | |
| f = open("diff","w") | |
| f.write(data) | |
| f.close() | |
| reponame = os.popen("cat diff | (grep '+ - repo:'||true) |awk '{print $4 $5}' ").read() | |
| data1 = str(reponame) | |
| data1 = data1.split('\n') | |
| print(data1) | |
| delrepos = os.popen("cat diff | (grep '\- - repo:'||true) |awk '{print $4 $5}' ").read() | |
| data2 = str(delrepos) | |
| data2 = data2.split('\n') | |
| return data1, data2 | |
| def check_repo(repo): | |
| org = os.environ.get("ORG") | |
| if '#' in repo: | |
| repo, c = repo.split('#', 1) | |
| res = requests.get("https://api.github.com/repos/" + org + "/" + repo) | |
| print("check_repo ",res.text) | |
| if res.status_code == 200: | |
| return repo | |
| def del_obs_package(repo): | |
| # delete obs package | |
| component = "community" | |
| if '#' in repo: | |
| repo, c = repo.split('#', 1) | |
| if c and c != '': | |
| component = c | |
| os.popen("osc rdelete deepin:Develop:%s/%s -m 'Remove by Repository-Manager pr' " % (component, repo)).read() | |
| os.popen("osc rdelete deepin:Unstable:%s/%s -m 'Remove by Repository-Manager pr' " % (component, repo)).read() | |
| def create_obs_package(repo): | |
| print("create_repo: " + repo) | |
| component = "community" | |
| if '#' in repo: | |
| repo, c = repo.split('#', 1) | |
| if c and c != '': | |
| component = c | |
| pkg_meta = f""" | |
| <package name="{repo}" project="deepin:Develop:{component}"> | |
| <title/> | |
| <description/> | |
| </package> | |
| """ | |
| service_content = f""" | |
| <services> | |
| <service name="obs_gbp"> | |
| <param name="url">https://github.com/deepin-community/{repo}.git</param> | |
| <param name="scm">git</param> | |
| <param name="exclude">.git</param> | |
| <param name="exclude">.github</param> | |
| <param name="versionformat">@CHANGELOG@@DEEPIN_OFFSET@</param> | |
| </service> | |
| </services> | |
| """ | |
| username = 'golf66' | |
| password = os.getenv('OSCPASS') | |
| obs_headers = { | |
| "Content-type": "text/xml" | |
| } | |
| # upload package meta and _service | |
| url = f"https://build.deepin.com/source/deepin:Develop:{component}/{repo}/_meta" | |
| response = requests.put(url, auth=(username, password), headers=obs_headers, data=pkg_meta) | |
| if response.status_code == 200: | |
| url = f"https://build.deepin.com/source/deepin:Develop:{component}/{repo}/_service" | |
| res = requests.put(url, auth=(username, password), headers=obs_headers, data=service_content) | |
| if res.status_code == 200: | |
| print("create obs service" + repo + " success") | |
| else: | |
| print("create obs service" + repo + " failed: " + res.text) | |
| os.exit(-1) | |
| else: | |
| print("create obs meta" + repo + " failed: " + response.text) | |
| os.exit(-1) | |
| def create_repo(repo): | |
| print("create_repo: " + repo) | |
| org = os.environ.get("ORG") | |
| component = "community" | |
| if '#' in repo: | |
| repo, c = repo.split('#', 1) | |
| if c and c != '': | |
| component = c | |
| data_repo = { | |
| 'owner': org, | |
| 'name': repo | |
| } | |
| url = create_repo_url | |
| if component != "community": | |
| url = "https://api.github.com/repos/" + org + "/template-repository-main/generate" | |
| res = requests.post(url, json = data_repo, headers = header) | |
| print("create_repo response: " + res.text) | |
| print("create_repo url: " + url) | |
| try: | |
| data, dels = get_pr_diff() | |
| #for repo in dels: | |
| # if repo != '': | |
| # print(repo) | |
| # del_obs_package(repo) | |
| for repo in data: | |
| if repo != '': | |
| print(repo) | |
| if check_repo(repo) == None: | |
| create_repo(repo) | |
| create_obs_package(repo) | |
| except BaseException as e: | |
| logging.error(e) | |
| exit(-10) | |
| - name: notify | |
| uses: actions/github-script@v5 | |
| with: | |
| script: | | |
| await github.rest.issues.createComment({ | |
| issue_number: context.issue.number, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| body: 'Created Successfully' | |
| }) | |
| return |