Files
wehub-resource-sync e0e362d700
SDK Tests / SDK CI (push) Blocked by required conditions
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
SDK Tests / Python SDK Tests (sandbox) (push) Waiting to run
SDK Tests / CLI Quality (push) Waiting to run
SDK Tests / CLI Tests (push) Waiting to run
SDK Tests / Python SDK Quality (code-interpreter) (push) Waiting to run
SDK Tests / Python SDK Quality (sandbox) (push) Waiting to run
SDK Tests / Python SDK Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Go SDK Quality And Tests (push) Waiting to run
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

191 lines
5.8 KiB
YAML

name: Generic Release
on:
workflow_dispatch:
inputs:
target:
description: "Release target key"
required: true
type: choice
options:
- js/sandbox
- js/code-interpreter
- python/sandbox
- python/code-interpreter
- python/mcp/sandbox
- java/sandbox
- java/code-interpreter
- csharp/sandbox
- csharp/code-interpreter
- sdks/sandbox/go
- cli
- server
- docker/execd
- docker/code-interpreter
- docker/ingress
- docker/egress
- k8s/controller
- k8s/task-executor
- helm/opensandbox
- helm
version:
description: "Version to release (e.g. 1.0.5 or v0.3.0)"
required: true
type: string
from_tag:
description: "Optional previous tag override"
required: false
type: string
no_path_filter:
description: "Disable default target path filtering"
required: true
default: false
type: boolean
extra_paths:
description: "Optional extra paths (comma-separated)"
required: false
type: string
initial_release:
description: "Allow release without previous tag"
required: true
default: false
type: boolean
dry_run:
description: "Preview only, no side effects"
required: true
default: true
type: boolean
permissions:
contents: write
id-token: write
attestations: write
artifact-metadata: write
jobs:
release-preflight:
uses: ./.github/workflows/release-preflight.yml
with:
require_approval: ${{ inputs.dry_run == false }}
release:
needs: release-preflight
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Ensure script executable
run: chmod +x scripts/release/create-release.sh
- name: Run generic release script
id: release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
ARGS=(
--target "${{ inputs.target }}"
--version "${{ inputs.version }}"
)
if [[ -n "${{ inputs.from_tag }}" ]]; then
ARGS+=(--from-tag "${{ inputs.from_tag }}")
fi
if [[ "${{ inputs.no_path_filter }}" == "true" ]]; then
ARGS+=(--no-path-filter)
fi
if [[ -n "${{ inputs.extra_paths }}" ]]; then
IFS=',' read -r -a EXTRA_PATHS <<< "${{ inputs.extra_paths }}"
for path in "${EXTRA_PATHS[@]}"; do
trimmed="$(echo "$path" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
if [[ -n "$trimmed" ]]; then
ARGS+=(--path "$trimmed")
fi
done
fi
if [[ "${{ inputs.initial_release }}" == "true" ]]; then
ARGS+=(--initial-release)
fi
if [[ "${{ inputs.dry_run }}" == "true" ]]; then
ARGS+=(--dry-run)
fi
scripts/release/create-release.sh "${ARGS[@]}"
- name: Verify release tag on origin
if: ${{ inputs.dry_run == false }}
env:
RELEASE_TAG: ${{ steps.release.outputs.tag }}
run: |
set -euo pipefail
local_commit="$(git rev-parse "${RELEASE_TAG}^{commit}")"
remote_commit="$(git ls-remote origin "refs/tags/${RELEASE_TAG}^{}" | awk 'NR == 1 { print $1 }')"
if [[ -z "$remote_commit" ]]; then
remote_commit="$(git ls-remote origin "refs/tags/${RELEASE_TAG}" | awk 'NR == 1 { print $1 }')"
fi
if [[ -z "$remote_commit" ]]; then
echo "::error::Release tag '${RELEASE_TAG}' does not exist on origin. Have an authorized release manager push the tag before publishing source artifacts."
exit 1
fi
if [[ "$local_commit" != "$remote_commit" ]]; then
echo "::error::Local release tag '${RELEASE_TAG}' resolves to ${local_commit}, but origin resolves to ${remote_commit}. Refusing to publish source artifacts."
exit 1
fi
- name: Create release source archive
if: ${{ inputs.dry_run == false }}
id: source_archive
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ steps.release.outputs.tag }}
run: |
set -euo pipefail
SAFE_TAG="$(printf '%s' "$RELEASE_TAG" | tr '/:' '--')"
ARCHIVE_NAME="opensandbox-${SAFE_TAG}.tar.gz"
ARCHIVE_DIR="dist/release-source"
mkdir -p "$ARCHIVE_DIR"
git archive \
--format=tar.gz \
--prefix="opensandbox-${SAFE_TAG}/" \
-o "${ARCHIVE_DIR}/${ARCHIVE_NAME}" \
"$RELEASE_TAG"
(
cd "$ARCHIVE_DIR"
sha256sum "$ARCHIVE_NAME" > SHA256SUMS
)
echo "archive_path=${ARCHIVE_DIR}/${ARCHIVE_NAME}" >> "$GITHUB_OUTPUT"
echo "checksums_path=${ARCHIVE_DIR}/SHA256SUMS" >> "$GITHUB_OUTPUT"
- name: Attest source release artifacts
if: ${{ inputs.dry_run == false }}
uses: actions/attest@v4
with:
subject-path: |
${{ steps.source_archive.outputs.archive_path }}
${{ steps.source_archive.outputs.checksums_path }}
- name: Upload source release artifacts
if: ${{ inputs.dry_run == false }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ steps.release.outputs.tag }}
run: |
set -euo pipefail
gh release upload "$RELEASE_TAG" \
"${{ steps.source_archive.outputs.archive_path }}" \
"${{ steps.source_archive.outputs.checksums_path }}" \
--clobber