Merge pull request #7 from YuCat-OVO:develop

Develop
This commit is contained in:
YuCat-OVO 2024-05-06 00:19:28 +08:00 committed by GitHub
commit ade68d4a2d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 280 additions and 558 deletions

89
.github/codeql.yml vendored
View File

@ -1,89 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "main" ]
paths:
- "get-version.py"
pull_request:
branches: [ "main" ]
paths:
- "get-version.py"
schedule:
- cron: '24 3 * * 2'
jobs:
analyze:
name: Analyze
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
# required for all workflows
security-events: write
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
language: [ 'python' ]
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
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.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"

View File

@ -12,8 +12,3 @@ updates:
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "daily"

View File

@ -1,59 +1,56 @@
name: Build & Release
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
workflow_dispatch:
inputs:
version:
description: "Version"
required: false
type: string
push:
branches:
- "main"
- "develop"
paths-ignore:
- ".github/**"
- "docs/**"
- "README.md"
- "get_version.py"
- "**.md"
env:
IMAGE_NAME: baidunetdisk-docker
DOCKERHUB_SLUG: docker.io/yucatovo/baidunetdisk-docker
GHCR_SLUG: ghcr.io/yucat-ovo/baidunetdisk-docker
jobs:
Build:
name: Build
strategy:
matrix:
arch: [linux/amd64, linux/arm64]
prepare:
name: prepare
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Set variables
id: set-vars
run: |
VERSION="1.0.4"
GITHUB_REF=${{ github.ref }}
BRACH=${GITHUB_REF#refs/heads/}
DATE=$(date '+%Y-%m-%dT%H:%M:%S%Z')
ARCH=${{ matrix.arch }}
PLATFORM_PAIR=${ARCH//\//-}
PLATFORM=${ARCH//linux\//}
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
echo "GITHUB_REF=${GITHUB_REF}" >> $GITHUB_OUTPUT
echo "BRACH=${BRACH}" >> $GITHUB_OUTPUT
echo "DATE=${DATE}" >> $GITHUB_OUTPUT
echo "PLATFORM_PAIR=${PLATFORM_PAIR}" >> $GITHUB_OUTPUT
echo "PLATFORM=${PLATFORM}" >> $GITHUB_OUTPUT
- name: Docker Meta
id: meta
uses: docker/metadata-action@v5
id: meta
with:
images: |
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}
ghcr.io/${{ github.repository }}
${{ env.DOCKERHUB_SLUG }}
${{ env.GHCR_SLUG }}
tags: |
type=raw,value=${{ steps.set-vars.outputs.VERSION }}
type=raw,value=${{ steps.set-vars.outputs.BRACH }}
type=raw,value=${{ steps.set-vars.outputs.PLATFORM }}
type=raw,value=latest
type=ref,event=branch,enable=${{ github.ref_name != github.event.repository.default_branch }}
type=edge,branch=develop
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }}
type=sha
labels: |
org.opencontainers.image.title=BaiduNetdisk-Docker
org.opencontainers.image.description=A BaiduNetdisk image base on Linuxserver.io's KasmVNC image.
org.opencontainers.image.vendor=YuCat-OVO
- name: Rename meta bake definition file
run: |
mv "${{ steps.meta.outputs.bake-file }}" "/tmp/bake-meta.json"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
@ -61,66 +58,106 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Upload meta bake definition
uses: actions/upload-artifact@v4
with:
name: bake-meta
path: /tmp/bake-meta.json
if-no-files-found: error
retention-days: 1
build:
runs-on: ubuntu-latest
needs:
- prepare
strategy:
fail-fast: false
matrix:
platform: ["linux/amd64", "linux/arm64"]
steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> "$GITHUB_ENV"
echo "ARCH=${platform//linux\//}" >> "$GITHUB_ENV"
- name: Checkout
uses: actions/checkout@v4
- name: Download meta bake definition
uses: actions/download-artifact@v4
with:
name: bake-meta
path: /tmp
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: "--debug"
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push by digest
id: build
uses: docker/build-push-action@v5
- name: Build
id: bake
uses: docker/bake-action@v4
with:
context: .
platforms: ${{ matrix.arch }}
build-args: |
BUILD_DATE=${{ steps.set-vars.outputs.DATE }}
VERSION=${{ steps.set-vars.outputs.VERSION }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
files: |
./docker-bake.hcl
/tmp/bake-meta.json
targets: ${{ env.PLATFORM_PAIR }}
set: |
*.tags=
*.platform=${{ matrix.platform }}
*.cache-from=type=gha,scope=build-${{ env.PLATFORM_PAIR }}
*.cache-to=type=gha,scope=build-${{ env.PLATFORM_PAIR }}
*.output=type=image,"name=${{ env.DOCKERHUB_SLUG }},${{ env.GHCR_SLUG }}",push-by-digest=true,name-canonical=true,push=true
- name: Export digest
- name: Export digest (amd64)
if: ${{ matrix.platform }} == "linux/amd64"
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
digest="${{ fromJSON(steps.bake.outputs.metadata).image-amd64['containerimage.digest'] }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Export digest (arm64)
if: ${{ matrix.platform }} == "linux/arm64"
run: |
mkdir -p /tmp/digests
digest="${{ fromJSON(steps.bake.outputs.metadata).image-arm64['containerimage.digest'] }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ steps.set-vars.outputs.PLATFORM_PAIR }}
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
Merge:
merge:
runs-on: ubuntu-latest
needs:
- Build
- build
steps:
- name: Checkout
uses: actions/checkout@master
- name: Set variables
id: set-vars
run: |
VERSION="1.0.3"
GITHUB_REF=${{ github.ref }}
BRACH=${GITHUB_REF#refs/heads/}
DATE=$(date '+%Y-%m-%dT%H:%M:%S%Z')
ACTOR=${{ github.actor }}
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
echo "GITHUB_REF=${GITHUB_REF}" >> $GITHUB_OUTPUT
echo "BRACH=${BRACH}" >> $GITHUB_OUTPUT
echo "DATE=${DATE}" >> $GITHUB_OUTPUT
echo "ACTOR=${ACTOR,,}" >> $GITHUB_OUTPUT
- name: Download meta bake definition
uses: actions/download-artifact@v4
with:
name: bake-meta
path: /tmp
- name: Download digests
uses: actions/download-artifact@v4
@ -132,39 +169,29 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker Meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}
ghcr.io/${{ github.repository }}
tags: |
type=raw,value=${{ steps.set-vars.outputs.VERSION }}
type=raw,value=${{ steps.set-vars.outputs.BRACH }}
type=raw,value=latest
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf 'ghcr.io/${{ steps.set-vars.outputs.ACTOR }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
docker buildx imagetools create $(jq -cr '.target."docker-metadata-action".tags | map(select(startswith("${{ env.DOCKERHUB_SLUG }}")) | "-t " + .) | join(" ")' /tmp/bake-meta.json) \
$(printf '${{ env.DOCKERHUB_SLUG }}@sha256:%s ' *)
docker buildx imagetools create $(jq -cr '.target."docker-metadata-action".tags | map(select(startswith("${{ env.GHCR_SLUG }}")) | "-t " + .) | join(" ")' /tmp/bake-meta.json) \
$(printf '${{ env.GHCR_SLUG }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}
tag=$(jq -r '.target."docker-metadata-action".args.DOCKER_META_VERSION' /tmp/bake-meta.json)
docker buildx imagetools inspect ${{ env.DOCKERHUB_SLUG }}:${tag}
docker buildx imagetools inspect ${{ env.GHCR_SLUG }}:${tag}

59
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,59 @@
name: test
on:
workflow_dispatch:
# push:
# branches:
# - "main"
# - "develop"
# paths-ignore:
# - "docs/**"
# - "**.md"
env:
BUILD_TAG: localhost:5000/yucatovo/baidunetdisk-docker:test
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform: ["linux/amd64", "linux/arm64"]
services:
registry:
image: registry:3.0.0-alpha.1
ports:
- 5000:5000
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set the value
id: set-vars
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> "$GITHUB_ENV"
echo "ARCH=${platform//linux\//}" >> "$GITHUB_ENV"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: network=host
platforms: ${{ matrix.platform }}
- name: Build
uses: docker/bake-action@v4
with:
push: true
targets: ${{ env.TARGET }}
env:
DEFAULT_TAG: ${{ env.BUILD_TAG }}-${{ env.PLATFORM_PAIR }}
- name: Test
run: |
uname -m
docker run --rm --platform "${{ matrix.platform }}" alpine:edge echo hello

View File

@ -1,44 +0,0 @@
name: Get BaiduNetdisk Version
on:
workflow_dispatch:
schedule:
- cron: "0 3 * * 0"
push:
branches:
- "main"
paths:
- "get_version.py"
jobs:
get-version:
name: Get BaiduNetdisk Version
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set variables
id: set-vars
run: |
RELEASE_NAME="Released on $(date +%Y%m%d%H%M)"
echo "RELEASE_NAME=${RELEASE_NAME}" >> $GITHUB_OUTPUT
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11.7"
- name: Run Script
run: |
pip install -r requirements.txt
python get_version.py
- name: Git push assets to branch
run: |
git config --local user.name "github-actions[bot]"
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add *.json
git commit -m "${{ steps.set-vars.outputs.RELEASE_NAME }}" || true
git push

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
.vscode/
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

View File

@ -1,14 +1,15 @@
# syntax=docker/dockerfile:1
FROM docker.io/library/alpine:edge as download
FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm
RUN \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.lzu.edu.cn/g' /etc/apk/repositories && \
apk update && \
apk add wget curl jq &&\
wget -nv $(curl 'https://yun.baidu.com/disk/cmsdata?platform=linux&page=1&num=1' | jq -r '.["list"][0]["url_1"]') -O /tmp/baidunetdisk.deb
# set version label
ARG BUILD_DATE
ARG VERSION
ARG TARGETPLATFORM
LABEL build_version="version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="YuCat-OVO"
LABEL org.opencontainers.image.source="https://github.com/linuxserver/docker-baseimage-kasmvnc"
FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm-062d5346-ls56
LABEL org.opencontainers.image.source="https://github.com/YuCat-OVO/BaiduNetdisk-Docker"
ENV \
CUSTOM_PORT="8080" \
@ -16,67 +17,22 @@ ENV \
HOME="/config" \
TITLE="Baidunetdisk"
COPY url.json /tmp/
COPY --from=download /tmp/baidunetdisk.deb /tmp/baidunetdisk.deb
# add local files
COPY root/ /
RUN \
TARGETPLATFORM=${TARGETPLATFORM:-linux/amd64} && \
echo "**** arch: ${TARGETPLATFORM} ****" && \
echo "**** add icon ****" && \
curl -o \
/kclient/public/icon.png \
https://raw.githubusercontent.com/YuCat-OVO/BaiduNetdisk-Docker/master/docs/baidunetdisk.png && \
sed -i "s/deb.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\
sed -i "s/security.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\
echo "**** fix trusted.gpg ****" && \
mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/docker.gpg && \
echo "**** install runtime packages ****" && \
if [ -n ${TZ} ]; then \
echo "**** TZ not found, setting up ****" && \
export TZ=Asia/Shanghai; \
fi && \
export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get update -y && \
apt-get -yy -qq install --no-install-recommends --no-install-suggests --fix-missing \
wget \
fonts-wqy-microhei \
fonts-wqy-zenhei \
dbus \
fcitx-rime \
libnss3 \
libopengl0 \
libxkbcommon-x11-0 \
libxcb-cursor0 \
libxcb-icccm4 \
libxcb-image0 \
libxcb-keysyms1 \
libxcb-randr0 \
libxcb-render-util0 \
libxcb-xinerama0 \
libxdamage1 \
poppler-utils \
python3 \
python3-xdg \
desktop-file-utils && \
\
echo "**** install BaiduNetdisk ****" && \
if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
echo "**** ${TARGETPLATFORM}, reading from url.json ****"; \
BAIDUNETDISK_VERSION=$(jq -r ".[-2]" /tmp/url.json); \
BAIDUNETDISK_URL=$(jq -r ".[-2]" /tmp/url.json); \
elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \
echo "**** ${TARGETPLATFORM}, reading from url.json ****"; \
BAIDUNETDISK_VERSION=$(jq -r ".[-1]" /tmp/url.json); \
BAIDUNETDISK_URL=$(jq -r ".[-1]" /tmp/url.json); \
echo "**** ${TARGETPLATFORM}, add args ****" && \
sed -i "s/baidunetdisk --no-sandbox/baidunetdisk --no-sandbox --disable-gpu-sandbox/g" /defaults/*; \
else \
echo "**** err, use default url ****" && \
BAIDUNETDISK_URL="https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_amd64.deb"; \
fi && \
echo "***** Getting ${BAIDUNETDISK_URL} ****" && \
curl -o \
/tmp/baidunetdisk.deb -L \
"$BAIDUNETDISK_URL" && \
for i in \
$(dpkg -I /tmp/baidunetdisk.deb | grep "Depends" | cut -c11- | awk -F ', ' '{ for(i=1; i<=NF; i++) print $i }'); \
do \
@ -88,6 +44,8 @@ RUN \
fi \
done && \
dpkg -i /tmp/baidunetdisk.deb && \
echo "**** add test ****" && \
chmod +x /usr/bin/mytest && \
echo "**** cleanup ****" && \
apt-get clean && \
rm -rf \

56
Dockerfile.arm64 Normal file
View File

@ -0,0 +1,56 @@
# syntax=docker/dockerfile:1
FROM docker.io/library/alpine:edge as download
RUN \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.lzu.edu.cn/g' /etc/apk/repositories && \
apk update && \
apk add wget curl jq &&\
wget -nv $(curl 'https://yun.baidu.com/disk/cmsdata?platform=linux&page=1&num=1' | jq -r '.["list"][0]["url_1"]' | sed "s/amd64/arm64/g") -O /tmp/baidunetdisk.deb
FROM ghcr.io/linuxserver/baseimage-kasmvnc:debianbookworm-062d5346-ls56
LABEL org.opencontainers.image.source="https://github.com/YuCat-OVO/BaiduNetdisk-Docker"
ENV \
CUSTOM_PORT="8080" \
CUSTOM_HTTPS_PORT="8181" \
HOME="/config" \
TITLE="Baidunetdisk"
COPY --from=download /tmp/baidunetdisk.deb /tmp/baidunetdisk.deb
# add local files
COPY root/ /
RUN \
sed -i "s/deb.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\
sed -i "s/security.debian.org/mirror.bfsu.edu.cn/g" /etc/apt/sources.list &&\
echo "**** fix trusted.gpg ****" && \
mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/docker.gpg && \
apt-get update -y && \
apt-get -yy -qq install --no-install-recommends --no-install-suggests --fix-missing \
fonts-wqy-microhei \
fonts-wqy-zenhei \
desktop-file-utils && \
\
echo "**** install BaiduNetdisk ****" && \
sed -i "s/baidunetdisk --no-sandbox/baidunetdisk --no-sandbox --disable-gpu-sandbox/g" /defaults/*; \
for i in \
$(dpkg -I /tmp/baidunetdisk.deb | grep "Depends" | cut -c11- | awk -F ', ' '{ for(i=1; i<=NF; i++) print $i }'); \
do \
if [ -n "$(dpkg -l | grep ^ii | grep $i)" ]; \
then \
echo "${i} installed,skip"; \
else \
apt-get -yy -qq install --no-install-recommends --no-install-suggests --fix-missing ${i}; \
fi \
done && \
dpkg -i /tmp/baidunetdisk.deb && \
echo "**** add test ****" && \
chmod +x /usr/bin/mytest && \
sed -i "s/baidunetdisk --no-sandbox/baidunetdisk --no-sandbox --disable-gpu-sandbox/g" root/usr/bin/mytest; \
echo "**** cleanup ****" && \
apt-get clean && \
rm -rf \
/tmp/* \
/var/lib/apt/lists/* \
/var/tmp/*

25
docker-bake.hcl Normal file
View File

@ -0,0 +1,25 @@
variable "DEFAULT_TAG" {
default = "baidunetdisk-docker:latest"
}
group "linux-amd64" {
targets = ["image-amd64"]
}
group "linux-arm64" {
targets = ["image-arm64"]
}
target "docker-metadata-action" {
tags = ["${DEFAULT_TAG}"]
}
target "image-amd64" {
platforms = ["linux/amd64"]
inherits = ["docker-metadata-action"]
dockerfile = "Dockerfile"
}
target "image-arm64" {
platforms = ["linux/arm64"]
inherits = ["docker-metadata-action"]
dockerfile = "Dockerfile.arm64"
}

View File

@ -1,244 +0,0 @@
import json
import re
import time
import requests
from lxml import etree
GLOBAL_HEADER = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}
# 截至2024-03-01最新的版本
GLOBAL_VERSION = [
"https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk_4.11.5_amd64.deb",
]
# 定义需要检测的版本号范围
max_version = [4, 20, 0]
min_version = [4, 17, 0]
# 定义请求延时时间(秒)
GLOBAL_REQUEST_DELAY = 0.5
def get_js_url() -> str:
"""请求百度网盘下载页,获取存在下载链接的js文件"""
max_attempts = 5
attempt = 0
url = ""
while attempt < max_attempts:
try:
r = requests.get(
"https://pan.baidu.com/download",
headers=GLOBAL_HEADER,
)
e = etree.HTML(r.text, parser=None)
# 获取包含链接的js文件
for i in e.xpath("//script/@src"):
if re.search("https:\\/\\/.*chunk-common.*\\.js", i):
url = i
# print(url)
return url
except Exception as e:
print(f"An error occurred: {e}")
attempt += 1
time.sleep(1) # 等待1秒再重试
if attempt == max_attempts:
print("Failed after several attempts")
return url
def append_json(json_file_name: str, add):
"""为Json添加元素"""
file = None
try:
with open(json_file_name, "r") as f:
file = json.load(f)
# print("file=", file)
except FileNotFoundError:
file = json.loads("")
file.append(add)
# print("ufile=", u_file)
with open(json_file_name, "w") as f:
f.write(json.dumps(file, sort_keys=True, indent=4))
return
def parse_url_from_json() -> list:
l = ""
try:
with open("url.json", "r") as f:
l = json.load(f)
except FileNotFoundError:
l = []
return l
def parse_url_from_js():
"""从js文件中提取下载的链接并且去重,写入文件 url.json"""
url = get_js_url()
u_url = []
max_attempts = 5
attempt = 0
while attempt < max_attempts:
try:
d_url = ""
r = requests.get(
url,
headers=GLOBAL_HEADER,
)
# 过滤链接
d_url = re.findall(
'(?:link|url(?:_[0-9])?):"https://[a-zA-Z/\\.]*?/netdisk/[a-zA-Z10-9/\\._-]*?(?=")',
r.text,
)
# 清理
for i in range(len(d_url)):
d_url[i] = re.sub('(link|url(?:_[0-9])?):"', "", d_url[i])
# 去重
for i in d_url:
if i not in u_url:
u_url.append(i)
break
except Exception as e:
print(f"An error occurred: {e}")
attempt += 1
time.sleep(1) # 等待1秒再重试
if attempt == max_attempts:
print("Failed after several attempts,set url to default")
u_url = GLOBAL_VERSION
with open("url.json", "w") as f:
f.write(json.dumps(u_url, sort_keys=True, indent=4))
return
def make_info_json(urls: list):
"""保存为Json文件"""
# print("urls:", urls)
l_url = urls[-3:]
# print(l_url)
j = []
for i in l_url:
j.append(
{
"version": re.findall("(?<=/)((?:[0-9]{1,2}(?:\\.)?){1,3})(?=/)", i)[0],
"arch": re.findall("(amd64|arm64|x86_64)", i)[0],
"pak": re.findall("(rpm|deb)", i)[0],
"url": i,
},
)
# print(j)
with open("info.json", "w") as f:
f.write(json.dumps(j, sort_keys=True, indent=4))
return
def make_url_temple(arch: str):
"""按照之前所获取的 url.json,创建模板"""
l = ""
url_temple = ""
try:
with open("url.json", "r") as f:
l = json.load(f)
for i in l:
if re.search("amd64", i) != None and re.search("deb", i) != None:
url_temple = re.sub("amd64", arch, i)
url_temple = re.sub(
"(?<=[_/])((?:[0-9]{1,2}(?:\\.)?){1,3})(?=[_/])", "{0}", url_temple
)
break
# print(url_temple)
except FileNotFoundError:
url_temple = "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/{0}/baidunetdisk_{0}_arm64.deb"
# print(url_temple)
return url_temple
def check_version(version: list, arch: str):
"""检测指定版本号是否可用"""
url = make_url_temple(arch).format(".".join(str(v) for v in version))
# url = "https://httpbin.org/status/200"
# print("Getting {0}".format(url))
max_attempts = 5
attempt = 0
while attempt < max_attempts:
try:
response = requests.head(
url,
headers=GLOBAL_HEADER,
)
if response.status_code == 200:
return True
else:
return False
except Exception as e:
print(f"An error occurred: {e}")
attempt += 1
time.sleep(1) # 等待1秒再重试
if attempt == max_attempts:
print("Failed after several attempts")
return
def find_latest_version(min_version, max_version):
"""寻找最新版本号"""
version_list = [
[x, y, z]
for x in range(max_version[0], min_version[0] - 1, -1)
for y in range(max_version[1], min_version[1] - 1, -1)
for z in range(20, -1, -1)
if not (x == max_version[0] and y == max_version[1] and z > max_version[2])
if not (x == min_version[0] and y == min_version[1] and z < min_version[2])
]
for arch in ["amd64", "arm64"]:
for version in version_list:
# 检测指定版本号是否可用
if check_version(version, arch):
print(
"arch {0} version {1} is available".format(
arch, ".".join(str(v) for v in version)
)
)
append_json(
"url.json",
make_url_temple(arch).format(".".join(str(v) for v in version)),
)
time.sleep(GLOBAL_REQUEST_DELAY)
break
else:
print(
"arch {0} version {1} is not available".format(
arch, ".".join(str(v) for v in version)
)
)
time.sleep(GLOBAL_REQUEST_DELAY)
# 找不到可用版本号返回None
return None
if __name__ == "__main__":
parse_url_from_js()
find_latest_version(min_version, max_version)
urls = parse_url_from_json()
make_info_json(urls)

View File

@ -1,20 +0,0 @@
[
{
"arch": "amd64",
"pak": "deb",
"url": "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk_4.11.5_amd64.deb",
"version": "4.11.5"
},
{
"arch": "amd64",
"pak": "deb",
"url": "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_amd64.deb",
"version": "4.17.7"
},
{
"arch": "arm64",
"pak": "deb",
"url": "https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_arm64.deb",
"version": "4.17.7"
}
]

View File

@ -1,2 +0,0 @@
lxml==5.2.1
requests==2.31.0

9
root/usr/bin/mytest Normal file
View File

@ -0,0 +1,9 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
sudo -u root -s /bin/bash -c "/opt/baidunetdisk/baidunetdisk --no-sandbox" > /tmp/baidunetdisk_output.txt 2>&1 &
sleep 15
echo -e '\033[0;31m'
cat /tmp/baidunetdisk_output.txt
echo -e '\033[0m'

View File

@ -1,10 +0,0 @@
[
"https://issuepcdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_7.19.0.18.exe",
"https://issuepcdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_6.9.10.1.exe",
"https://issuepcdn.baidupcs.com/issue/netdisk/MACguanjia/BaiduNetdisk_mac_4.11.0.dmg",
"https://issuepcdn.baidupcs.com/issue/netdisk/MACguanjia/BaiduNetdisk_mac_4.11.0_arm64.dmg",
"https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk-4.11.5.x86_64.rpm",
"https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.11.5/baidunetdisk_4.11.5_amd64.deb",
"https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_amd64.deb",
"https://issuepcdn.baidupcs.com/issue/netdisk/LinuxGuanjia/4.17.7/baidunetdisk_4.17.7_arm64.deb"
]