rewrite merge module with go

This commit is contained in:
wcbing 2024-09-29 12:29:22 +08:00
parent bad08a9cc8
commit ee55153922
12 changed files with 47 additions and 159 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "merge"]
path = merge
url = https://github.com/wcbing/merge-apt-repo

View File

@ -35,8 +35,6 @@ echo "deb [signed-by=/etc/apt/keyrings/wcbing.gpg] https://packages.wcbing.top/d
|mihomo|mihomo|[Github Releases](https://github.com/MetaCubeX/mihomo/releases)|
|hugo|hugo|[Github Releases](https://github.com/gohugoio/hugo/releases)|
|RustDesk|rustdesk|[Github Releases](https://github.com/rustdesk/rustdesk/releases)|
|Visual Studio Code|code|[官网](https://code.visualstudio.com)|
|Microsoft Edge|microsoft-edge-stable|[官网](https://www.microsoft.com/en-us/edge/download)|
|Obsidian|obsidian|[Github Releases](https://github.com/obsidianmd/obsidian-releases/releases)|
|WPS Office|wps-office|[官网](https://linux.wps.cn/)|
|百度网盘|baidunetdisk|[官网](https://pan.baidu.com/download)|
@ -49,13 +47,17 @@ echo "deb [signed-by=/etc/apt/keyrings/wcbing.gpg] https://packages.wcbing.top/d
### 合并自官方 repo
|软件名|包名|渠道|架构|
|-|-|-|-|
|Google Chrome|google-chrome-stable<br />google-chrome-beta<br />google-chrome-unstable|官方仓库|x86_64|
|termius|termius-app<br />termius-beta|官方仓库|x86_64|
|Sublime Text<br />Sublime Merge|sublime-text<br />sublime-merge|官方仓库|x86_64, arm64|
|Mozilla Firefox|firefox<br />firefox_beta<br />firefox_devedition<br />firefox_esr<br />firefox_nightly<br />|官方仓库|x86_64|
|Steam|steam-launcher<br />steam-libs-amd64|官方仓库|x86_64|
|软件名|包名|
|-|-|
|Mozilla Firefox|firefox<br />firefox_beta<br />firefox_devedition<br />firefox_esr<br />firefox_nightly|
|Google Chrome|google-chrome-stable<br />google-chrome-beta<br />google-chrome-unstable|
|Microsoft Edge|microsoft-edge-stable<br />microsoft-edge-beta<br />microsoft-edge-dev|
|Visual Studio Code|code<br />code-insiders<br />code-exploration|
|termius|termius-app<br />termius-beta|
|Sublime Text<br />Sublime Merge|sublime-text<br />sublime-merge|
|Steam|steam-launcher<br />steam-libs-amd64|
|Tailscale|tailscale<br />tailscale-nginx-auth|
## 自建仓库

5
data/config.json Normal file
View File

@ -0,0 +1,5 @@
{
"packages_https": "deb/Packages",
"merge_all_https": "data/merge_all_https.json",
"merge_latest_https": "data/merge_latest_https.json"
}

View File

@ -0,0 +1,27 @@
[
{
"name": "firefox",
"repo": "https://packages.mozilla.org/apt/",
"amd64_path": "dists/mozilla/main/binary-amd64/Packages"
},
{
"name": "microsoft-edge",
"repo": "https://packages.microsoft.com/repos/edge/",
"amd64_path": "dists/stable/main/binary-amd64/Packages"
},
{
"name": "code",
"repo": "https://packages.microsoft.com/repos/code/",
"amd64_path": "dists/stable/main/binary-amd64/Packages"
},
{
"name": "tailscale",
"repo": "https://pkgs.tailscale.com/stable/debian/",
"amd64_path": "dists/sid/main/binary-amd64/Packages"
},
{
"name": "sublime",
"repo": "https://download.sublimetext.com/",
"amd64_path": "apt/stable/Packages"
}
]

View File

@ -1,12 +0,0 @@
import requests
import re
from module.check import deb
x64_deb_req = "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64"
res = requests.head(x64_deb_req)
version = re.findall("_(.*)-", res.headers["Location"])[0]
x64_deb_url = res.headers["Location"]
# print(version, x64_deb_url)
deb("code", version, x64_deb_url)

View File

@ -1,12 +0,0 @@
import requests
import re
from module.check import deb
x64_deb_url = "https://go.microsoft.com/fwlink?linkid=2149051"
res = requests.head(x64_deb_url)
version = re.findall("_(.*)_", res.headers["Location"])[0]
x64_deb_url = res.headers["Location"]
# print(version, x64_deb_url)
deb("microsoft-edge-stable", version, x64_deb_url)

View File

@ -1,40 +0,0 @@
import requests
import json
"""
Merge all deb packages info from repos to a Packages file.
These repos only include the latest deb packages.
"""
repo_info_list = []
amd64_Packages_all = ""
# read all repo info from json file
with open("merge_all/repo_info.json", "r") as all_repo_info:
repo_info_list = json.loads(all_repo_info.read())
all_repo_info.close()
"""
repo info json format:
{
"name": repo name
"repo": repo url, end with "/"
"Packages_path": repo Packages file path, start with no "/"
}
"""
# get deb packages info from repo
for i in repo_info_list:
# get amd64 deb packages info
if "amd64_path" in i:
amd64_Packages_info = requests.get(i["repo"] + i["amd64_path"]).text
amd64_Packages_all += amd64_Packages_info.replace(
"Filename: ", "Filename: " + i["repo"]
)
print(i["name"] + " x64 repo: done")
# write deb packages info to local Packages file
with open("deb/Packages", "a+") as f:
f.write(amd64_Packages_all)
f.close()

View File

@ -1,40 +0,0 @@
import requests
import re
from module.merge_deb import merge_latest_deb
deb_repo = "https://packages.mozilla.org/apt/"
x64_deb_Packages_path = "dists/mozilla/main/binary-amd64/Packages"
x64_deb_Packages = requests.get(deb_repo + x64_deb_Packages_path).text
x64_debs = re.split("(?=Package: )", x64_deb_Packages)[1:]
# firefox 的 Packages 按照版本升序排列,最后一个即为最新版本
firefox_x64_debs = []
firefox_beta_x64_debs = []
firefox_devedition_x64_debs = []
firefox_esr_x64_debs = []
firefox_nightly_x64_debs = []
for x64_deb in x64_debs:
if "Package: firefox\n" in x64_deb:
firefox_x64_debs.append(x64_deb)
elif "Package: firefox-beta\n" in x64_deb:
firefox_beta_x64_debs.append(x64_deb)
elif "Package: firefox-devedition\n" in x64_deb:
firefox_devedition_x64_debs.append(x64_deb)
elif "Package: firefox-esr\n" in x64_deb:
firefox_esr_x64_debs.append(x64_deb)
elif "Package: firefox-nightly\n" in x64_deb:
firefox_nightly_x64_debs.append(x64_deb)
x64_deb_latest = (
firefox_x64_debs[-1]
+ firefox_beta_x64_debs[-1]
+ firefox_devedition_x64_debs[-1]
+ firefox_esr_x64_debs[-1]
+ firefox_nightly_x64_debs[-1]
+ "\n"
)
merge_latest_deb("firefox", deb_repo, x64_deb_latest)

View File

@ -1,14 +0,0 @@
def merge_latest_deb(name, repo, deb_latest, local_Packages_path="deb/Packages"):
r"""Merge latest deb packages info from a repo to a Packages file
:param name: repo name
:param repo: repo url, end with "/"
:param deb_latest: latest deb package info manually organized
:param local_Packages_path: local Packages file path, default is "deb/Packages"
:return: None
"""
with open(local_Packages_path, "a+") as f:
f.write(deb_latest.replace("Filename: ", "Filename: " + repo))
f.close()
print(name + " repo: done")

View File

@ -1,30 +0,0 @@
import requests
import re
from module.merge_deb import merge_latest_deb
deb_repo = "https://download.sublimetext.com/"
deb_Packages_url = deb_repo + "apt/stable/Packages"
deb_Packages = requests.get(deb_Packages_url).text
debs = re.split("(?=Package: )", deb_Packages)[1:]
# print(debs)
# sublime 的 Packages 按照版本升序排列,倒数两个为 amd64 和 arm64 最新版本
sublime_text_debs = []
sublime_merge_debs = []
for deb in debs:
if "Package: sublime-text\n" in deb:
sublime_text_debs.append(deb)
elif "Package: sublime-merge\n" in deb:
sublime_merge_debs.append(deb)
deb_latest = (
sublime_text_debs[-2]
+ sublime_text_debs[-1]
+ sublime_merge_debs[-2]
+ sublime_merge_debs[-1]
)
merge_latest_deb("sublime", deb_repo, deb_latest)

View File

@ -10,8 +10,7 @@ apt-ftparchive packages . > Packages
# merge the Packages files of third-party repositories
cd ..
find merge_latest -maxdepth 1 -type f -name "*.py" -exec python3 {} \;
python3 merge_all/merge_all.py
./merge-apt-repo
cd deb
# list brief information about packages