添加 api使用和版本发布.md
自动流水线示例 / build (push) Successful in 2m21s
Details
自动流水线示例 / deploy (push) Successful in 16s
Details
自动流水线示例 / 检查 (push) Successful in 6s
Details
自动流水线示例 / 制品上传 (ubuntu-latest, a) (push) Has been skipped
Details
自动流水线示例 / 制品上传 (ubuntu-latest, b) (push) Has been skipped
Details
自动流水线示例 / 制品上传 (ubuntu-latest, c) (push) Has been skipped
Details
自动流水线示例 / upload (ubuntu-latest) (push) Successful in 18s
Details
自动流水线示例 / download (push) Successful in 49s
Details
自动流水线示例 / build (push) Successful in 2m21s
Details
自动流水线示例 / deploy (push) Successful in 16s
Details
自动流水线示例 / 检查 (push) Successful in 6s
Details
自动流水线示例 / 制品上传 (ubuntu-latest, a) (push) Has been skipped
Details
自动流水线示例 / 制品上传 (ubuntu-latest, b) (push) Has been skipped
Details
自动流水线示例 / 制品上传 (ubuntu-latest, c) (push) Has been skipped
Details
自动流水线示例 / upload (ubuntu-latest) (push) Successful in 18s
Details
自动流水线示例 / download (push) Successful in 49s
Details
发布生产
This commit is contained in:
parent
cd43485d7b
commit
bbe7cdf4ba
|
|
@ -0,0 +1,333 @@
|
|||
接口:https://git.ewancle.com/api/swagger 和使用教程:https://docs.gitea.com/zh-cn/development/api-usage
|
||||
# 全部作用列表https://docs.gitea.com/zh-cn/development/oauth2-provider
|
||||
curl -X POST "https://git.ewancle.com/api/v1/users/xiehaijun/tokens" \
|
||||
-H "Authorization: token f5856ff0aecd675b72c1910bd4a19679927a6ba0" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"name": "full-access-token",
|
||||
"scopes": [
|
||||
"repo",
|
||||
"repo:status",
|
||||
"admin:repo_hook",
|
||||
"admin:org",
|
||||
"write:issue",
|
||||
"write:repository",
|
||||
"read:repository"
|
||||
]
|
||||
}'
|
||||
|
||||
# 管理员账号进行作用域token创建
|
||||
curl -X 'POST' \
|
||||
'https://git.ewancle.com/api/v1/users/xiehaijun/tokens' \
|
||||
-u 'xiehaijun:Xiehaijun945' \
|
||||
-H 'accept: application/json' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{
|
||||
"name": "full-access-token",
|
||||
"scopes": [
|
||||
"write:repository",
|
||||
"read:repository",
|
||||
"read:user",
|
||||
"write:user",
|
||||
"read:organization",
|
||||
"write:organization"
|
||||
]
|
||||
}'
|
||||
# 获取token,需要read:admin,write:admin
|
||||
curl -X 'GET' \
|
||||
'https://git.ewancle.com/api/v1/users/xiehaijun/tokens' \
|
||||
-H "Authorization: token a94110b4fa993133ceb0e04fdabfd70626e02405" \
|
||||
-H 'accept: application/json'
|
||||
|
||||
|
||||
|
||||
|
||||
EOF 前有空格或 Tab → 会导致闭合失败(命令行就和run: |下面的行平齐)
|
||||
你写的是 <<EOF,但忘了在最后一行独占写 EOF
|
||||
- name: Create Gitea Release
|
||||
run: |
|
||||
curl -s -X POST "${GITEA_API_URL}/repos/${GITEA_USER}/${GITEA_REPO}/releases" \
|
||||
-H "Authorization: token ${{ secrets.GITEA_PAT }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d @- <<EOF
|
||||
{
|
||||
"tag_name": "${{ env.TAG_NAME }}",
|
||||
"name": "Release ${{ env.TAG_NAME }}",
|
||||
"body": "This is an automated release",
|
||||
"draft": false,
|
||||
"prerelease": false
|
||||
}
|
||||
EOF
|
||||
|
||||
|
||||
将 JSON 拆成变量拼接,避免复杂嵌套:
|
||||
- name: Create Gitea Release
|
||||
run: |
|
||||
JSON=$(jq -n --arg tag "$TAG_NAME" --arg name "Release $TAG_NAME" --arg body "Auto release" '{
|
||||
tag_name: $tag,
|
||||
name: $name,
|
||||
body: $body,
|
||||
draft: false,
|
||||
prerelease: false
|
||||
}')
|
||||
|
||||
echo "$JSON"
|
||||
|
||||
curl -s -X POST "${GITEA_API_URL}/repos/${GITEA_USER}/${GITEA_REPO}/releases" \
|
||||
-H "Authorization: token ${{ secrets.GITEA_PAT }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
非常棒的问题!为了确保 **Gitea Release 上传附件正确识别 MIME 类型(`Content-Type`)**,你在使用 `curl` 上传文件时,应当为不同文件类型设置**合适的 Content-Type**。
|
||||
|
||||
---
|
||||
|
||||
## ✅ 常见类型对应的 `Content-Type` 设置
|
||||
|
||||
| 文件类型 | 示例文件名 | 推荐 Content-Type |
|
||||
| ------------------ | -------------------- | -------------------------------------------------------------------------------- |
|
||||
| `.txt` | `README.txt` | `text/plain` |
|
||||
| `.zip` | `release.zip` | `application/zip` |
|
||||
| `.tar.gz` / `.tgz` | `release.tar.gz` | `application/gzip` |
|
||||
| `.exe` | `app.exe` | `application/vnd.microsoft.portable-executable` 或 `application/octet-stream`(通用) |
|
||||
| `.md5` / `.sha256` | `release.zip.sha256` | `text/plain` 或 `application/octet-stream`(兼容性更好) |
|
||||
|
||||
---
|
||||
|
||||
### 💡 推荐策略
|
||||
|
||||
> ❗ **通用、安全的 fallback 类型:** `application/octet-stream` 可用于所有二进制文件上传,兼容性最强。
|
||||
|
||||
---
|
||||
|
||||
## 🧪 示例上传命令
|
||||
|
||||
```bash
|
||||
# 上传 zip 文件
|
||||
curl -X POST "$GITEA_API_URL/repos/$OWNER/$REPO/releases/$RELEASE_ID/assets?name=release.zip" \
|
||||
-H "Authorization: token $GITEA_PAT" \
|
||||
-H "Content-Type: application/zip" \
|
||||
--data-binary @"dist/release.zip"
|
||||
|
||||
# 上传 sha256 文件
|
||||
curl -X POST "$GITEA_API_URL/repos/$OWNER/$REPO/releases/$RELEASE_ID/assets?name=release.zip.sha256" \
|
||||
-H "Authorization: token $GITEA_PAT" \
|
||||
-H "Content-Type: text/plain" \
|
||||
--data-binary @"dist/release.zip.sha256"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 生成验证文件示例(Shell)
|
||||
|
||||
```bash
|
||||
# 生成 sha256 验证文件
|
||||
sha256sum dist/release.zip > dist/release.zip.sha256
|
||||
|
||||
# 可选:生成 md5 验证文件
|
||||
md5sum dist/release.zip > dist/release.zip.md5
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 自动 Content-Type 映射 Bash 函数(可嵌入 GitHub Actions)
|
||||
|
||||
```bash
|
||||
detect_content_type() {
|
||||
case "$1" in
|
||||
*.zip) echo "application/zip" ;;
|
||||
*.tar.gz|*.tgz) echo "application/gzip" ;;
|
||||
*.exe) echo "application/octet-stream" ;;
|
||||
*.txt) echo "text/plain" ;;
|
||||
*.md5|*.sha256) echo "text/plain" ;;
|
||||
*) echo "application/octet-stream" ;; # fallback
|
||||
esac
|
||||
}
|
||||
```
|
||||
|
||||
> 然后你就可以这样调用:
|
||||
|
||||
```bash
|
||||
CONTENT_TYPE=$(detect_content_type "$FILENAME")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 总结
|
||||
|
||||
| 文件扩展名 | 推荐 Content-Type |
|
||||
| --------- | ----------------------------- |
|
||||
| `.zip` | `application/zip` |
|
||||
| `.tar.gz` | `application/gzip` |
|
||||
| `.exe` | `application/octet-stream` |
|
||||
| `.txt` | `text/plain` |
|
||||
| `.sha256` | `text/plain` 或 `octet-stream` |
|
||||
| 其他未知类型 | `application/octet-stream` |
|
||||
|
||||
---
|
||||
|
||||
如你希望我将这些自动识别上传逻辑封装为 GitHub Actions 步骤或脚本,并上传多个文件到 Gitea,我可以帮你生成一套模板。是否继续?
|
||||
|
||||
|
||||
|
||||
|
||||
你的问题分成两大部分,我们逐一系统回答:
|
||||
|
||||
---
|
||||
|
||||
# ✅ 一、`.xz`、`.pdf`、`.jpg`、`.mp4` 等常见文件的 Content-Type 设置
|
||||
|
||||
| 文件扩展名 | 示例文件 | 推荐 `Content-Type` |
|
||||
| ---------------- | ------------- | ------------------ |
|
||||
| `.xz` | `data.tar.xz` | `application/x-xz` |
|
||||
| `.pdf` | `manual.pdf` | `application/pdf` |
|
||||
| `.jpg` / `.jpeg` | `cover.jpg` | `image/jpeg` |
|
||||
| `.png` | `image.png` | `image/png` |
|
||||
| `.mp4` | `video.mp4` | `video/mp4` |
|
||||
| `.json` | `data.json` | `application/json` |
|
||||
| `.csv` | `data.csv` | `text/csv` |
|
||||
| `.xml` | `data.xml` | `application/xml` |
|
||||
|
||||
✅ 如果不确定,可使用通用 `application/octet-stream`,**但推荐精确设置 MIME 类型**,便于 Release 页面或浏览器识别。
|
||||
|
||||
---
|
||||
|
||||
# ✅ 二、GitHub 与 Gitee 发布 Release 并上传文件(API 对比)
|
||||
|
||||
---
|
||||
|
||||
## ✅ GitHub:创建 Release 并上传 Asset 附件
|
||||
|
||||
### 🔗 GitHub API 文档:
|
||||
|
||||
* [Create Release](https://docs.github.com/en/rest/releases/releases#create-a-release)
|
||||
* [Upload Release Asset](https://docs.github.com/en/rest/releases/assets?apiVersion=2022-11-28#upload-a-release-asset)
|
||||
|
||||
### 📦 步骤 1:创建 Release
|
||||
|
||||
```bash
|
||||
response=$(curl -s -X POST "https://api.github.com/repos/OWNER/REPO/releases" \
|
||||
-H "Authorization: token $GITHUB_PAT" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d @- <<EOF
|
||||
{
|
||||
"tag_name": "v1.2.3",
|
||||
"name": "Release v1.2.3",
|
||||
"body": "This is an automated release",
|
||||
"draft": false,
|
||||
"prerelease": false
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
upload_url=$(echo "$response" | jq -r '.upload_url' | sed 's/{?name,label}//')
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 📦 步骤 2:上传附件
|
||||
|
||||
```bash
|
||||
curl -X POST "$upload_url?name=manual.pdf" \
|
||||
-H "Authorization: token $GITHUB_PAT" \
|
||||
-H "Content-Type: application/pdf" \
|
||||
--data-binary @"./build/manual.pdf"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Gitee:创建 Release 并上传文件(非标准,需曲线实现)
|
||||
|
||||
### 🔗 官方文档(不完善):
|
||||
|
||||
* [Gitee Releases API](https://gitee.com/api/v5/swagger#/getV5ReposOwnerRepoReleases)
|
||||
|
||||
Gitee 的限制:
|
||||
|
||||
* ✅ 可以创建 Release(相当于发布 Tag)
|
||||
* ❌ 不支持上传附件到 Release(没有像 GitHub 的 assets 接口)
|
||||
* ✅ 可上传文件到 repo 或 wiki,或额外建专用仓库存文件
|
||||
|
||||
---
|
||||
|
||||
### 🟡 Gitee 创建 Release 示例(只含 tag 和说明):
|
||||
|
||||
```bash
|
||||
curl -X POST "https://gitee.com/api/v5/repos/OWNER/REPO/releases" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d @- <<EOF
|
||||
{
|
||||
"access_token": "$GITEE_TOKEN",
|
||||
"tag_name": "v1.2.3",
|
||||
"name": "Release v1.2.3",
|
||||
"body": "Changelog here"
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 🔴 Gitee 上传文件:无直接 API 可传文件到 Release 页面
|
||||
|
||||
**替代方案:**
|
||||
|
||||
1. 把文件上传到仓库某个目录:
|
||||
|
||||
```bash
|
||||
curl -X POST https://gitee.com/api/v5/repos/OWNER/REPO/contents/path/to/file \
|
||||
-F access_token=$GITEE_TOKEN \
|
||||
-F content=$(base64 ./manual.pdf) \
|
||||
-F message="upload file"
|
||||
```
|
||||
|
||||
⚠️ 支持 txt, md 等文本文件(base64 转码后大小限制),不推荐上传大型二进制文件。
|
||||
|
||||
2. 使用专门的文件下载仓库或私有网盘存放链接,在 Release 中贴出 URL。
|
||||
|
||||
---
|
||||
|
||||
# ✅ 三、总结对比:GitHub vs Gitee 发布 Release 附件能力
|
||||
|
||||
| 操作 | GitHub | Gitee |
|
||||
| ---------------- | ----------------------- | --------------- |
|
||||
| 创建 Release | ✅ | ✅ |
|
||||
| 上传附件到 Release 页面 | ✅ `assets` 接口 | ❌ 不支持直接上传 |
|
||||
| 支持多附件 | ✅ | ❌(建议提供外链) |
|
||||
| 自动化支持 | ✅ GitHub Actions / curl | ❌ 需要 workaround |
|
||||
|
||||
---
|
||||
|
||||
## ✅ 补充建议:构建通用上传脚本
|
||||
|
||||
你可以用如下结构自动上传任意构建产物:
|
||||
|
||||
```bash
|
||||
file="release.tar.xz"
|
||||
mime_type=$(file --mime-type -b "$file")
|
||||
|
||||
curl -X POST "$upload_url?name=$(basename $file)" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-H "Content-Type: $mime_type" \
|
||||
--data-binary @"$file"
|
||||
```
|
||||
|
||||
> `file --mime-type` 自动识别 MIME 类型,适合你上传 `.xz`, `.pdf`, `.mp4` 等任意格式。
|
||||
|
||||
---
|
||||
|
||||
## ✅ 可选扩展:GitHub Actions 中自动上传多个文件到 Release
|
||||
|
||||
如果你希望我写一份完整的 `matrix` + MIME 自动识别 + GitHub/Gitee 多仓同时发布的 Actions,我可以马上生成。
|
||||
|
||||
是否继续?你也可以告诉我具体构建产物目录和需要上传哪些类型,我直接帮你生成 YAML 或 Shell。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue