gitea/自动上传下载仓库附件

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gitea.service是一个用于管理和控制Gitea版本控制系统的系统服务。Gitea是一个轻量级的Git托管解决方案,通常用于组织或团队进行代码版本管理和协作开发。 要下载Gitea.service,首先需要访问Gitea项目的官方网站或相关的代码托管平台,例如GitHub。在官方网站或代码托管平台上,可以找到Gitea.service的源代码和相关的下载链接。 通常来说,Gitea.service是作为一个systemd服务单元的形式提供。因此,在下载之前,需要确保本地系统上已经安装了systemd,并且有足够的权限进行安装和管理服务。 下载Gitea.service之后,需要将其安装到systemd的服务目录中。具体的安装步骤可能会因操作系统的不同而有所差异,一般来说,可以通过使用命令行工具(如wget或curl)将该文件下载到本地系统的指定目录中。 安装完成后,需要使用systemctl命令来启动和管理Gitea.service。使用systemctl start命令可以启动Gitea.service,使用systemctl enable命令可以将其设置为系统启动时自动启动。 在启动并配置好Gitea.service之后,即可通过指定的端口和地址访问Gitea版本控制系统。可以通过浏览器访问Gitea的Web界面,或使用Git命令行工具与远程Gitea仓库进行交互和代码管理。 总而言之,要下载Gitea.service,需要访问官方网站或相关代码托管平台,找到对应的源代码和下载链接。安装和管理Gitea.service需要确保本地系统已安装systemd,并使用systemctl命令启动和管理服务。最后,配置完成后,即可通过Web界面或命令行工具使用Gitea进行代码管理和协作开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值