-
Notifications
You must be signed in to change notification settings - Fork 5
feat: staging setup for extensions #296
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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)) | ||
| 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 | ||
|
|
||
|
|
@@ -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" | ||
|
|
@@ -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 | ||
|
|
||
|
|
@@ -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 | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. artifact gets a '-prerelease' suffix to make for easier management in |
||
| path: release-${{ inputs.extension-name }}.json | ||
| retention-days: 1 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 | ||
|
|
@@ -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: | ||
|
|
@@ -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 | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. writing to a separate file called |
||
| 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 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| { | ||
| "categories": [], | ||
| "tags": [], | ||
| "requiredFeatures": [], | ||
| "extensions": [] | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the
-pflag makes it so we always include prerelease versions in range matching.