feat(update): adopt framework rc2 release driver and checksum flow

This commit is contained in:
thibaud-leclere 2026-04-14 15:13:47 +02:00
parent 9b0bd7e175
commit 3ba3475753
4 changed files with 52 additions and 4 deletions

View file

@ -12,6 +12,7 @@ jobs:
env: env:
BINARY_NAME: email-mcp BINARY_NAME: email-mcp
BUILD_PATH: build/email-mcp-linux-amd64 BUILD_PATH: build/email-mcp-linux-amd64
CHECKSUM_PATH: build/email-mcp-linux-amd64.sha256
MANIFEST_PATH: mcp.toml MANIFEST_PATH: mcp.toml
steps: steps:
@ -28,6 +29,14 @@ jobs:
- name: Build linux amd64 binary - name: Build linux amd64 binary
run: make build GOOS=linux GOARCH=amd64 run: make build GOOS=linux GOARCH=amd64
- name: Generate binary checksum
run: |
set -euo pipefail
asset_name="$(basename "${BUILD_PATH}")"
checksum_value="$(sha256sum "${BUILD_PATH}" | cut -d' ' -f1)"
printf '%s %s\n' "${checksum_value}" "${asset_name}" > "${CHECKSUM_PATH}"
- name: Generate release notes - name: Generate release notes
id: release_notes id: release_notes
env: env:
@ -165,3 +174,30 @@ jobs:
cat asset.json >&2 cat asset.json >&2
exit 1 exit 1
fi fi
- name: Upload checksum asset
env:
REPOSITORY: ${{ github.repository }}
API_URL: ${{ github.api_url }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
RELEASE_ID: ${{ steps.release.outputs.release_id }}
run: |
set -euo pipefail
owner="${REPOSITORY%%/*}"
repo="${REPOSITORY#*/}"
asset_name="$(basename "${CHECKSUM_PATH}")"
upload_url="${API_URL}/repos/${owner}/${repo}/releases/${RELEASE_ID}/assets?name=${asset_name}"
http_code="$(curl -sS -o asset.json -w '%{http_code}' \
-X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/octet-stream" \
--data-binary @"${CHECKSUM_PATH}" \
"${upload_url}")"
if [ "${http_code}" -lt 200 ] || [ "${http_code}" -ge 300 ]; then
echo "asset upload failed with status ${http_code}" >&2
cat asset.json >&2
exit 1
fi

View file

@ -110,15 +110,20 @@ credentials not configured; run `email-mcp setup`
./email-mcp update ./email-mcp update
``` ```
Le manifeste de ce repo pointe vers lendpoint Gitea : Le manifeste de ce repo utilise le driver Gitea du framework :
```toml ```toml
binary_name = "email-mcp" binary_name = "email-mcp"
[update] [update]
source_name = "email-mcp releases" source_name = "email-mcp releases"
driver = "gitea"
repository = "AI/email-mcp"
base_url = "https://gitea.lclr.dev" base_url = "https://gitea.lclr.dev"
latest_release_url = "https://gitea.lclr.dev/api/v1/repos/AI/email-mcp/releases/latest" asset_name_template = "{binary}-{os}-{arch}{ext}"
checksum_asset_name = "{asset}.sha256"
checksum_required = true
token_env_names = ["GITEA_TOKEN"]
``` ```
## Diagnostic ## Diagnostic
@ -173,6 +178,7 @@ Une release est générée automatiquement quand tu pousses un tag `v*` sur le r
Les assets publiés sont : Les assets publiés sont :
- `build/email-mcp-linux-amd64` - `build/email-mcp-linux-amd64`
- `build/email-mcp-linux-amd64.sha256`
- `mcp.toml` - `mcp.toml`
## Compiler depuis les sources ## Compiler depuis les sources

View file

@ -705,8 +705,9 @@ func TestAppRunUpdateLoadsManifestNearExecutable(t *testing.T) {
if err := os.WriteFile(filepath.Join(tempDir, "mcp.toml"), []byte(` if err := os.WriteFile(filepath.Join(tempDir, "mcp.toml"), []byte(`
[update] [update]
source_name = "test" source_name = "test"
driver = "gitea"
repository = "AI/email-mcp"
base_url = "http://127.0.0.1:1" base_url = "http://127.0.0.1:1"
latest_release_url = "http://127.0.0.1:1/releases/latest"
`), 0o600); err != nil { `), 0o600); err != nil {
t.Fatalf("WriteFile manifest returned error: %v", err) t.Fatalf("WriteFile manifest returned error: %v", err)
} }

View file

@ -3,8 +3,13 @@ docs_url = "https://gitea.lclr.dev/AI/email-mcp"
[update] [update]
source_name = "email-mcp releases" source_name = "email-mcp releases"
driver = "gitea"
repository = "AI/email-mcp"
base_url = "https://gitea.lclr.dev" base_url = "https://gitea.lclr.dev"
latest_release_url = "https://gitea.lclr.dev/api/v1/repos/AI/email-mcp/releases/latest" asset_name_template = "{binary}-{os}-{arch}{ext}"
checksum_asset_name = "{asset}.sha256"
checksum_required = true
token_env_names = ["GITEA_TOKEN"]
[environment] [environment]
known = ["EMAIL_MCP_PROFILE", "EMAIL_MCP_HOST", "EMAIL_MCP_USERNAME", "EMAIL_MCP_PASSWORD"] known = ["EMAIL_MCP_PROFILE", "EMAIL_MCP_HOST", "EMAIL_MCP_USERNAME", "EMAIL_MCP_PASSWORD"]