Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 56 additions & 2 deletions .github/workflows/nightly-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,33 @@ jobs:
exit 1
fi

- name: Skip if this push is a release merge
id: release-check
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
package_version=$(node -p "require('./src/package.json').version")
commit_subject=$(git log -1 --format=%s)
skip=false

if [[ "$commit_subject" =~ ^chore:\ prepare\ v[0-9]+\.[0-9]+\.[0-9]+\ release ]]; then
echo "Commit '${commit_subject}' looks like a release-prep merge; skipping nightly pre-release."
skip=true
else
release_error=$(gh release view "v${package_version}" 2>&1 >/dev/null) && release_found=true || release_found=false
if [ "$release_found" = "true" ]; then
echo "v${package_version} is already published as a stable release; skipping nightly pre-release."
skip=true
elif [ "$release_error" != "release not found" ]; then
echo "::error::gh release view failed unexpectedly: ${release_error}"
exit 1
fi
fi

echo "skip=${skip}" >> "$GITHUB_OUTPUT"

- name: Set pre-release version
if: steps.release-check.outputs.skip != 'true'
id: version
env:
RUN_NUMBER: ${{ github.run_number }}
Expand All @@ -61,13 +87,15 @@ jobs:
EOF

- name: Build workspace packages
if: steps.release-check.outputs.skip != 'true'
env:
PKG_RELEASE_CHANNEL: prerelease
run: |
pnpm --filter @roo-code/build build
pnpm --filter @roo-code/vscode-webview build

- name: Package pre-release VSIX
if: steps.release-check.outputs.skip != 'true'
env:
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
PKG_RELEASE_CHANNEL: prerelease
Expand All @@ -76,6 +104,7 @@ jobs:
pnpm --filter ./src exec vsce package --pre-release --no-dependencies --out ../bin

- name: Verify VSIX contents
if: steps.release-check.outputs.skip != 'true'
env:
VERSION_NUMBER: ${{ steps.version.outputs.number }}
run: |
Expand All @@ -87,6 +116,7 @@ jobs:
grep -q "extension/webview-ui/audio/celebration.wav" /tmp/zoo-code-vsix-contents.txt

- name: Validate packaged manifest identity
if: steps.release-check.outputs.skip != 'true'
env:
VERSION_NUMBER: ${{ steps.version.outputs.number }}
run: |
Expand All @@ -98,12 +128,36 @@ jobs:
test "$artifact_name" = "zoo-code"
test "$artifact_publisher" = "ZooCodeOrganization"

# Open VSX is intentionally excluded: it has no pre-release channel concept,
# so pre-release builds would surface as the latest stable version for all users.
- name: Publish pre-release to VS Code Marketplace
if: steps.release-check.outputs.skip != 'true'
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
VERSION_NUMBER: ${{ steps.version.outputs.number }}
run: |
npx @vscode/vsce publish --pre-release --packagePath "bin/zoo-code-${VERSION_NUMBER}.vsix"
echo "Published ZooCodeOrganization.zoo-code ${VERSION_NUMBER} as a VS Code Marketplace pre-release"

# The VSIX built above with `vsce package --pre-release` already carries the
# Microsoft.VisualStudio.Code.PreRelease manifest property, which is what Open
# VSX reads to flag the version. `ovsx publish` ignores --pre-release for an
# already-packaged .vsix (it only applies when ovsx does the packaging itself),
# so it's intentionally omitted here.
#
# Open VSX's "latest" alias resolves to the highest semver across stable and
# pre-release alike (pre-release only breaks ties at equal major.minor.patch),
# so a nightly build can transiently become "latest" until the next stable
# release outranks it. This mirrors how Marketplace pre-release users already
# track the newest published version, so it's an accepted trade-off here too.
- name: Publish pre-release to Open VSX Registry
if: steps.release-check.outputs.skip != 'true'
env:
OVSX_PAT: ${{ secrets.OVSX_PAT }}
VERSION_NUMBER: ${{ steps.version.outputs.number }}
run: |
set -o pipefail
publish_output=$(pnpm exec ovsx publish "bin/zoo-code-${VERSION_NUMBER}.vsix" --skip-duplicate 2>&1 | tee /dev/stderr)
if echo "$publish_output" | grep -q "is already published"; then
echo "ZooCodeOrganization.zoo-code ${VERSION_NUMBER} was already published to Open VSX; skipped."
else
echo "Published ZooCodeOrganization.zoo-code ${VERSION_NUMBER} as an Open VSX pre-release"
fi
Loading