![cover](https://img-blog.csdnimg.cn/img_convert/8f462733799c497d96af7c4b86deb46f.png)
gitea/自动上传下载仓库附件
gitea/自动上传下载仓库附件📖 说明github 提供了命令行工具操作仓库, 支持通过命令行上传下载文件到或从仓库版本发布页面的附件;gitea 支持建立私有 git 服务器, gitea 也提供了命令行工具操作仓库, 当前使用 gitea 版本: 1.20.3, tea 版本: 0.9.2, 目前支持的功能有限: 不支持单独更新仓库版本发布页面的附件。
·
gitea/自动上传下载仓库附件
📖 说明
- 支持命令行上传文件到仓库版本发布页面附件/ release upload assets attachment
- 支持命令行从仓库版本发布页面附件下载文件/ release download assets attachment
- 支持 token 访问私有仓库
- 安装支持工具 curl / deno
- 支持批处理自动控制
github 提供了命令行工具 gh 操作仓库, 支持通过命令行上传下载文件到或从仓库版本发布页面的附件; gitea 支持建立私有 git 服务器, gitea 也提供了命令行工具 tea 操作仓库, 当前使用 gitea 版本: 1.20.3, tea 版本: 0.9.2, 目前支持的功能有限: 不支持单独更新仓库版本发布页面的附件
设置环境变量
set "GITEA_OAUTH_TOKEN=1234567890123456789012345678901234567890"
set "GITEA_SERVER_URL=http://ipv4orv6:port"
set "GITEA_SERVER_USER=user_name"
set "git_repo_tag=v1.0.0"
获取远程仓库名称
简单点直接设置远程仓库名称
set "git_repo_name=test"
复杂点自动获取远程仓库名称: 需要额外安装 deno, 下面示例从仓库命名 origin 获取远程仓库名称
@set _longcmds=^
import { basename } from 'https://deno.land/std@0.203.0/path/mod.ts'; ^
import { Logger, Filter, Human } from 'https://jspm.dev/caterpillar'; ^
const logger = new Logger(); ^
logger.pipe(new Human()).pipe(Deno.stderr); ^
logger.info('Getting the repo remote package name.'); ^
const res=Deno.run({ cmd: [ 'git', 'remote', 'get-url', '--push', ^
'origin'], ^
stdout: 'piped', ^
stderr: 'piped', ^
stdin: 'null' }); ^
const { code } = await res.status(); ^
const gitRepoUrl = new TextDecoder().decode(await res.output()); ^
const encoder = new TextEncoder(); ^
const stdout_pending = [ ^
logger.info(gitRepoUrl), ^
console.log('repo_name: ' + basename(gitRepoUrl, '.git')), ^
]; ^
await Promise.all(stdout_pending); ^
logger.info('Done.'); ^
/*Deno.exit(code);*/ ^
;
if "xy" == "xN" @CALL deno eval --ext=ts "%_longcmds%"
set "git_repo_name="
@set /a tee=0
@for /f "tokens=1,2*" %%I in ('CALL deno eval --ext=ts "%_longcmds%"') do @(
set /a tee+=1
if "x%%I" == "xrepo_name:" set git_repo_name=%%J
)
@echo repo_name: %git_repo_name%
获取发布版本编号
简单点直接设置版本发布编号
set "git_repo_release_id=15832"
复杂点自动获取版本发布编号: 需要额外安装 deno
@set _longcmds=^
import { basename } from 'https://deno.land/std@0.203.0/path/mod.ts'; ^
import { Logger, Filter, Human } from 'https://jspm.dev/caterpillar'; ^
const logger = new Logger(); ^
logger.pipe(new Human()).pipe(Deno.stderr); ^
logger.info('Getting the repo release json.'); ^
const url = `${Deno.env.get(\"GITEA_SERVER_URL\")}/api/v1/repos/${Deno.env.get(\"GITEA_SERVER_USER\")}/${Deno.env.get(\"git_repo_name\")}/releases?access_token=${Deno.env.get(\"GITEA_OAUTH_TOKEN\")}`; ^
if (false) await Promise.all([console.log(url),]); ^
const res = await fetch(url); ^
const data = await res.json(); ^
if (false) await Promise.all([console.log(data),]); ^
if (false) console.log(Object.keys(data).length); ^
let tag_name = undefined; ^
let tag_id = undefined; ^
for (let tag_key in data) { ^
let value = data[tag_key]; ^
if (false) console.log(tag_key, value); ^
if (false) for (let release_key in value) { ^
let release_value = value[release_key]; ^
console.log(release_key, release_value); ^
}; ^
if (value.hasOwnProperty('tag_name') ^&^& value['tag_name'] == Deno.env.get(\"git_repo_tag\")) { ^
if (value.hasOwnProperty('id')) { tag_name = value['tag_name']; tag_id = value['id']; }; ^
}; ^
}; ^
if (true) console.log(`tag_id: ${tag_id}`); ^
if (true) console.log(`tag_name: ${tag_name}`); ^
;
if "xy" == "xN" @CALL deno eval --ext=ts "%_longcmds%"
set "git_repo_release_id="
@set /a tee=0
@for /f "tokens=1,2*" %%I in ('CALL deno eval --ext=ts "%_longcmds%"') do @(
set /a tee+=1
if "x%%I" == "xtag_id:" set git_repo_release_id=%%J
)
@echo tag_id: %git_repo_release_id%
上传仓库附件
set "attachment_file=files.7z"
curl --user %GITEA_SERVER_USER%:%GITEA_OAUTH_TOKEN% -X POST ^
-include -F attachment=@%attachment_file% ^
%GITEA_SERVER_URL%/api/v1/repos/%GITEA_SERVER_USER%/%git_repo_name%/releases/%git_repo_release_id%/assets -v
下载仓库附件
set "attachment_file=files.7z"
curl --user %GITEA_SERVER_USER%:%GITEA_OAUTH_TOKEN% ^
--output "output/%attachment_file%" ^
%GITEA_SERVER_URL%/%GITEA_SERVER_USER%/%git_repo_name%/releases/download/%git_repo_tag%/%attachment_file%
💯🚀🎯
更多推荐
所有评论(0)