Skip to content
Draft
Show file tree
Hide file tree
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
31 changes: 25 additions & 6 deletions .github/actions/release-extension/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,31 @@ runs:

- name: Get manifest extension version
run: |
MANIFEST_VERSION=$(semver -c $(jq -c -r '.extension.version' < ./extensions/${{ inputs.extension-name }}/manifest.json))
MANIFEST_VERSION=$(semver -c -p $(jq -c -r '.extension.version' < ./extensions/${{ inputs.extension-name }}/manifest.json))
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the -p flag makes it so we always include prerelease versions in range matching.

echo "MANIFEST_VERSION=$MANIFEST_VERSION" >> "$GITHUB_ENV"
if [[ "$MANIFEST_VERSION" == *"-"* ]]; then
PRERELEASE="true"
else
PRERELEASE="false"
fi
echo "PRERELEASE=$PRERELEASE" >> "$GITHUB_ENV"
shell: bash

# Grabs the latest version from the extensions.json file
# Grabs the latest version from the appropriate extensions file
# For prerelease versions, check extensions-prerelease.json
# For stable versions, check extensions.json
# If an extension hasn't been released yet we default to `0.0.0` so any
# version in the manifest will be higher
- name: Get lastest version from extension list
continue-on-error: true
run: |
LATEST_VERSION=$(jq -c '.extensions[] | select(.name=="${{ inputs.extension-name }}").latestVersion.version' < extensions.json)
LATEST_VERSION=$(semver -c "${LATEST_VERSION:-0.0.0}")
if [ "$PRERELEASE" = "true" ]; then
EXTENSION_LIST_FILE="extensions-prerelease.json"
else
EXTENSION_LIST_FILE="extensions.json"
fi
LATEST_VERSION=$(jq -c '.extensions[] | select(.name=="${{ inputs.extension-name }}").latestVersion.version' < "$EXTENSION_LIST_FILE")
LATEST_VERSION=$(semver -c -p "${LATEST_VERSION:-0.0.0}")
echo "LATEST_VERSION=$LATEST_VERSION" >> "$GITHUB_ENV"
shell: bash

Expand Down Expand Up @@ -57,7 +70,7 @@ runs:
echo "$VERSION_INFO" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

HIGHER_VERSION=$(semver "$MANIFEST_VERSION" "$LATEST_VERSION" | tail -n 1)
HIGHER_VERSION=$(semver -p "$MANIFEST_VERSION" "$LATEST_VERSION" | tail -n 1)
if [ "$MANIFEST_VERSION" = "$HIGHER_VERSION" ] && [ "$MANIFEST_VERSION" != "$LATEST_VERSION" ]; then
MESSAGE="🚀 Will release! The manifest version is greater than the released version."
echo "$MESSAGE"
Expand Down Expand Up @@ -86,13 +99,19 @@ runs:
run: |
RELEASE_TAG="${{ inputs.extension-name }}@v$MANIFEST_VERSION"
echo "RELEASE_TAG=$RELEASE_TAG" >> "$GITHUB_ENV"
PRERELEASE_FLAG=""
if [ "$PRERELEASE" = "true" ]; then
PRERELEASE_FLAG="--prerelease"
fi
echo "PRERELEASE_FLAG=$PRERELEASE_FLAG" >> "$GITHUB_ENV"
shell: bash

- name: Release
if: github.ref_name == 'main' && steps.should_release.outputs.should_release == 'true'
run: |
gh release create $RELEASE_TAG \
--title "${{ inputs.extension-name }} v$MANIFEST_VERSION" \
$PRERELEASE_FLAG \
${{ inputs.extension-name }}.tar.gz
shell: bash

Expand All @@ -110,6 +129,6 @@ runs:
if: github.ref_name == 'main' && steps.should_release.outputs.should_release == 'true'
uses: actions/upload-artifact@v4
with:
name: release-${{ inputs.extension-name }}.json
name: release-${{ inputs.extension-name }}${{ env.PRERELEASE == 'true' && '-prerelease' || '' }}.json
Copy link
Author

@joshyam-k joshyam-k Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

artifact gets a '-prerelease' suffix to make for easier management in extensions.yml

path: release-${{ inputs.extension-name }}.json
retention-days: 1
52 changes: 52 additions & 0 deletions .github/workflows/extensions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -275,13 +275,35 @@ jobs:
pattern: release-*.json
path: releases
merge-multiple: true

# don't add prerelease files to extensions.json on main
# TODO: verify this does what we want
- name: Remove prerelease files
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to make sure we don't fetch pre-release versions here.

run: rm -f releases/release-*-prerelease.json

# We use jq --slurp to create a single JSON array from all the JSON files
# to use in the `update-extension-list` job
- name: Fetch releases
id: fetch-releases
run: echo "releases=$(cat releases/*.json | jq -c --slurp .)" >> "$GITHUB_OUTPUT"

fetch-prerelease-releases:
runs-on: ubuntu-latest
needs: [simple-extension-release, publisher-command-center, package-vulnerability-scanner, runtime-version-scanner, usage-metrics-dashboard]
if: ${{ always() }}
outputs:
releases: ${{ steps.fetch-releases.outputs.releases }}
steps:
- name: Download prerelease data
uses: actions/download-artifact@v4
with:
pattern: release-*-prerelease.json
path: releases
merge-multiple: true
- name: Fetch releases
id: fetch-releases
run: echo "releases=$(cat releases/*.json 2>/dev/null | jq -c --slurp . || echo '[]')" >> "$GITHUB_OUTPUT"

# Updates the `extensions.json` file with the latest release data from
# all extensions that were released in this workflow using the `fetch-releases`
# job output
Expand All @@ -294,6 +316,7 @@ jobs:
# Sets the RELEASES environment variable for the extension list update
# script to read in
env:
EXTENSION_LIST_FILE: extensions.json
RELEASES: ${{ needs.fetch-releases.outputs.releases }}

steps:
Expand Down Expand Up @@ -325,3 +348,32 @@ jobs:
git add extensions.json
git commit -m "Update extension list"
git push

update-prerelease-extension-list:
runs-on: ubuntu-latest
needs: [fetch-prerelease-releases]
if: ${{ always() && needs.fetch-prerelease-releases.result == 'success' && needs.fetch-prerelease-releases.outputs.releases != '[]' }}
env:
RELEASES: ${{ needs.fetch-prerelease-releases.outputs.releases }}
EXTENSION_LIST_FILE: extensions-prerelease.json
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writing to a separate file called extensions-prerelease.json

steps:
# Same steps as update-extension-list but for extensions-prerelease.json
- uses: actions/checkout@v4
with:
ref: main
ssh-key: ${{ secrets.DEPLOY_KEY }}
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
cache: "npm"
cache-dependency-path: scripts/package-lock.json
- run: npm ci
working-directory: ./scripts
- run: npm run update-extension-list
working-directory: ./scripts
- run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add extensions-prerelease.json
git commit -m "Update prerelease extension list"
git push
6 changes: 6 additions & 0 deletions extensions-prerelease.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"categories": [],
"tags": [],
"requiredFeatures": [],
"extensions": []
}
Loading