Skip to content

feat: add libvpl and libvpl-tools #2905

feat: add libvpl and libvpl-tools

feat: add libvpl and libvpl-tools #2905

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