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%

💯🚀🎯

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐