From f2dc5fd33dbf5219e1e2d4dd2f17e6f0ec444b5e Mon Sep 17 00:00:00 2001 From: Siyaram Meena Date: Wed, 25 Sep 2024 13:19:34 +0530 Subject: [PATCH 1/2] SIGINT-2290: Prod release process for ADO --- .github/workflows/create-tag.yml | 75 +++++++++++++ .../workflows/deploy-synopsys-extension.yml | 103 ------------------ .github/workflows/publish-QAExtension.yml | 29 +++-- .../workflows/publish-synopsys-extension.yml | 67 ++++++++++++ .../workflows/upgrade-extension-version.yml | 101 +++++++++++++++++ 5 files changed, 257 insertions(+), 118 deletions(-) create mode 100644 .github/workflows/create-tag.yml delete mode 100644 .github/workflows/deploy-synopsys-extension.yml create mode 100644 .github/workflows/publish-synopsys-extension.yml create mode 100644 .github/workflows/upgrade-extension-version.yml diff --git a/.github/workflows/create-tag.yml b/.github/workflows/create-tag.yml new file mode 100644 index 0000000..68245a0 --- /dev/null +++ b/.github/workflows/create-tag.yml @@ -0,0 +1,75 @@ +name: create-tag + +on: + workflow_dispatch: + inputs: + TAG: + description: 'TAG' + required: true + default: "" + type: string + TAG_BODY: + description: 'TAG DESCRIPTION' + required: false + default: "" + type: string + IS_DRAFT: + description: 'CREATE AS DRAFT' + required: false + default: false + type: boolean + IS_PRERELEASE: + description: 'PRERELEASE TAG' + required: true + default: true + type: boolean +jobs: + create-tag: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Install dependencies + run: cd synopsys-task && npm ci + + - name: Rebuild the dist/ directory + run: cd synopsys-task && npm run build && npm run package + + - name: Compare the expected and actual dist/ directories + run: | + cd synopsys-task + if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then + echo "Detected uncommitted changes after build. See status below:" + git diff + exit 1 + fi + id: diff + + - name: replace \n + id: process_body + run: | + tag_body="${{ github.event.inputs.TAG_BODY }}" + echo "${tag_body}">>processed_body.txt + sed -i 's/\\n/\n/g' processed_body.txt + cat processed_body.txt + processed_body=$(cat processed_body.txt | tr '\n' '\n') + echo "PROCESSED_BODY<>$GITHUB_ENV + echo "$processed_body">>$GITHUB_ENV + echo "EOF">>$GITHUB_ENV + + - name: Create Release + id: create_release + uses: actions/create-release@latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: ${{ github.event.inputs.TAG }} + release_name: "SYNOPSYS EXTENSION ${{ github.event.inputs.TAG }}" + body: ${{ env.PROCESSED_BODY }} + draft: ${{ github.event.inputs.IS_DRAFT }} + prerelease: ${{ github.event.inputs.IS_PRERELEASE }} \ No newline at end of file diff --git a/.github/workflows/deploy-synopsys-extension.yml b/.github/workflows/deploy-synopsys-extension.yml deleted file mode 100644 index ef88556..0000000 --- a/.github/workflows/deploy-synopsys-extension.yml +++ /dev/null @@ -1,103 +0,0 @@ -name: deploy-synopsys-extension - -on: - workflow_dispatch: - -jobs: - deploy-synopsys-extension: - if: "!contains(github.event.head_commit.message, '[skip ci]')" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set Node.js 20.x - uses: actions/setup-node@v4 - with: - node-version: 20.x - - - name: Install dependencies - run: cd synopsys-task && npm ci - - - name: Rebuild the dist/ directory - run: cd synopsys-task && npm run build && npm run package - - - name: Compare the expected and actual dist/ directories - run: | - cd synopsys-task - if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then - echo "Detected uncommitted changes after build. See status below:" - git diff - exit 1 - fi - id: diff - - - name: versioning - id: version-update - env: - GITHUB_TOKEN: ${{ secrets.GITHUBTOKEN }} - run: | - extension_name=$(jq -r '.name' < vss-extension.json) - echo "EXTENSION_NAME=$extension_name" >> $GITHUB_ENV - echo "EXTENSION NAME: "$extension_name - current_extension_version=$(jq -r '.version' < vss-extension.json) - echo "CURRENT_VERSION=$current_extension_version" >> $GITHUB_ENV - echo "CURRENT EXTENSION VERSION: " $current_extension_version - current_major=$(echo $current_extension_version | awk -F. '{print $1}') - current_minor=$(echo $current_extension_version | awk -F. '{print $2}') - current_patch=$(echo $current_extension_version | awk -F. '{print $3}') - COMMIT_MESSAGE=$(git log -1 --pretty=%B | head -n 1) - echo "COMMIT_MESSAGE=$COMMIT_MESSAGE" >> $GITHUB_ENV - echo "commit message: " $COMMIT_MESSAGE - if [[ "$COMMIT_MESSAGE" == *"version-upgrade"* ]]; then - new_version=$current_extension_version - echo "Updating vss-extension-dev.json with the new version: ${new_version}" - jq --arg new_version "$new_version" '.version = $new_version' vss-extension-dev.json > vss-extension-dev.json.tmp && mv vss-extension-dev.json.tmp vss-extension-dev.json - echo "Updated vss-extension-dev.json file" - cat vss-extension-dev.json - - echo "Updating extension_version.txt with the new version: ${new_version}" - sed -i "s/published_qaextension_version=.*/published_qaextension_version=$new_version/" extension_version.txt - cat extension_version.txt - echo "Updated extension_version.txt file" - echo - - cd synopsys-task - echo "Updating package.json with the new version: ${new_version}" - jq --arg new_version "$new_version" '.version = $new_version' package.json > package.json.tmp && mv package.json.tmp package.json - echo "Updated package.json file" - echo - - echo "Updating package-lock.json with the new version: ${new_version}" - jq --arg new_version "$new_version" '(.version = $new_version) | (.packages[""].version = $new_version)' package-lock.json > package-lock.json.tmp && mv package-lock.json.tmp package-lock.json - echo "Updated package-lock.json file" - echo - - echo "Updating task.json with the new version: ${new_version}" - jq --argjson major "$current_major" --argjson minor "$current_minor" --argjson patch "$current_patch" '(.version.Major = $major) | (.version.Minor = $minor) | (.version.Patch = $patch)' task.json > task.json.tmp && mv task.json.tmp task.json - echo "Updated task.json file" - else - new_version=$current_extension_version - echo "Commit message does not contains 'version-upgrade' message" - echo "Extension version will not be updating automatically. Current version: ${new_version}" - fi - echo "NEW_VERSION=$new_version" >> $GITHUB_ENV - - - name: update extension version in file - if: "contains(env.COMMIT_MESSAGE, 'version-upgrade')" - id: update-extension-version - env: - GITHUB_TOKEN: ${{ secrets.GITHUBTOKEN }} - run: | - echo "Updating extension version in vss-extension-dev.json, extension_version.txt, package.json, package-lock.json & task.json file" - git config --local user.name "$(git log -n 1 --pretty=format:%an)" - git config --local user.email "$(git log -n 1 --pretty=format:%ae)" - git checkout -b extension_version_update - git add vss-extension-dev.json extension_version.txt - echo "Install dependencies && Rebuild the dist/ directory" - cd synopsys-task && npm ci && npm run build && npm run package - git add package.json package-lock.json task.json - git commit -m "upgrade extension version to ${{ env.NEW_VERSION }} [skip ci]" - git push origin extension_version_update - gh pr create --base main --head extension_version_update --title "Version upgrade to ${{ env.NEW_VERSION }}" --body "${{ env.EXTENSION_NAME }} version upgrade to ${{ env.NEW_VERSION }}" --fill - gh pr merge --squash --subject "Extension version upgrade to ${{ env.NEW_VERSION }} [skip ci]" --delete-branch - echo "Successful updated extension version in vss-extension-dev.json, extension_version.txt, package.json, package-lock.json & task.json file..." diff --git a/.github/workflows/publish-QAExtension.yml b/.github/workflows/publish-QAExtension.yml index 9a752da..fc2d35c 100644 --- a/.github/workflows/publish-QAExtension.yml +++ b/.github/workflows/publish-QAExtension.yml @@ -46,31 +46,30 @@ jobs: echo "PREVIOUS PUBLISHED QAEXTENSION VERSION: " $previous_published_qaextension_version previous_major=$(echo $previous_published_qaextension_version | awk -F. '{print $1}') previous_minor=$(echo $previous_published_qaextension_version | awk -F. '{print $2}') + previous_patch=$(echo $previous_published_qaextension_version | awk -F. '{print $3}') current_major=$(echo $current_extension_version | awk -F. '{print $1}') current_minor=$(echo $current_extension_version | awk -F. '{print $2}') - current_patch=$(echo $current_extension_version | awk -F. '{print $3}') if [ "$previous_major" -eq "$current_major" ] && [ "$previous_minor" -eq "$current_minor" ]; then - current_patch=$((current_patch+1)) + current_patch=$((previous_patch+1)) new_version=$current_major.$current_minor.$current_patch echo "Updating extension version to: ${new_version}" - - echo "Updating vss-extension-dev.json with the new version: ${new_version}" - jq --arg new_version "$new_version" '.version = $new_version' vss-extension-dev.json > vss-extension-dev.json.tmp && mv vss-extension-dev.json.tmp vss-extension-dev.json - echo "Updated vss-extension-dev.json file" - cat vss-extension-dev.json - echo - - echo "Updating extension_version.txt with the new version: ${new_version}" - sed -i "s/published_qaextension_version=.*/published_qaextension_version=$new_version/" extension_version.txt - cat extension_version.txt - echo - echo "Updated extension_version.txt file" else new_version=$current_extension_version echo "Extension version will not be updating automatically. Current version: ${new_version}" fi + echo "Updating vss-extension-dev.json with the new version: ${new_version}" + jq --arg new_version "$new_version" '.version = $new_version' vss-extension-dev.json > vss-extension-dev.json.tmp && mv vss-extension-dev.json.tmp vss-extension-dev.json + echo "Updated vss-extension-dev.json file" + cat vss-extension-dev.json + echo + + echo "Updating extension_version.txt with the new version: ${new_version}" + sed -i "s/published_qaextension_version=.*/published_qaextension_version=$new_version/" extension_version.txt + cat extension_version.txt + echo + echo "Updated extension_version.txt file" + echo "NEW_VERSION=$new_version" >> $GITHUB_ENV - - name: publish-QAExtension id: publish-qaextension if: ${{ steps.version-update.conclusion == 'success' }} diff --git a/.github/workflows/publish-synopsys-extension.yml b/.github/workflows/publish-synopsys-extension.yml new file mode 100644 index 0000000..9c042db --- /dev/null +++ b/.github/workflows/publish-synopsys-extension.yml @@ -0,0 +1,67 @@ +name: publish-synopsys-extension + +on: + workflow_dispatch: + inputs: + isPublish: + description: 'DO YOU WANT TO PUBLISH SYNOPSYS EXTENSION TO MARKETPLACE' + required: true + default: false + type: boolean + +jobs: + publish-synopsys-extension: + if: ${{ github.event.inputs.isPublish == 'true' }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Compare the expected and actual dist/ directories + run: | + cd synopsys-task + if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then + echo "Detected uncommitted changes after build. See status below:" + git diff + exit 1 + fi + id: diff + + - name: publish-Extension + id: publish-extension + env: + PROD_PUBLISHER_NAME: ${{ secrets.PROD_PUBLISHER_NAME }} + PROD_ORGANIZATION_NAME: ${{ secrets.PROD_ORG_NAME }} + PROD_USER_TOKEN: ${{ secrets.PROD_USER_TOKEN }} #personal_access_token of azure devops account + run: | + extension_name=$(jq -r '.name' < vss-extension.json) + echo "EXTENSION_NAME=$extension_name" >> $GITHUB_ENV + echo "EXTENSION NAME: "$extension_name + extension_version=$(jq -r '.version' < vss-extension.json) + echo "EXTENSION_VERSION=$extension_version" >> $GITHUB_ENV + echo "EXTENSION VERSION: " $extension_version + echo "Installing tfx-cli..." + npm i -g tfx-cli + echo "Creating extension $extension_name with version $extension_version" + npx tfx-cli extension create --manifest-globs vss-extension.json + echo "Extension $extension_name created successfully!" + echo "Publishing extension $extension_name with version $extension_version" + tfx extension publish --publisher ${PROD_PUBLISHER_NAME} --manifest-globs vss-extension.json --token ${PROD_USER_TOKEN} | tee tfx_output.log + publish_exit_code=${PIPESTATUS[0]} + if [ $publish_exit_code -eq 0 ]; then + echo "Extension $extension_name with version $extension_version published successfully!" + else + echo "Failed to publish the extension $extension_name with version $extension_version." + exit 1 + fi + + - name: Upload Artifact + uses: actions/upload-artifact@v4 + if: ${{ steps.publish-extension.conclusion == 'success' }} + with: + name: ${{ env.EXTENSION_NAME }}-${{ env.EXTENSION_VERSION }}.vsix + path: "*.vsix" \ No newline at end of file diff --git a/.github/workflows/upgrade-extension-version.yml b/.github/workflows/upgrade-extension-version.yml new file mode 100644 index 0000000..6f8024a --- /dev/null +++ b/.github/workflows/upgrade-extension-version.yml @@ -0,0 +1,101 @@ +name: upgrade-extension-version + +on: + workflow_dispatch: + inputs: + version: + description: 'EXTENSION VERSION' + required: true + default: "" + type: string + +jobs: + upgrade-extension-version: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + + - name: Install dependencies + run: cd synopsys-task && npm ci + + - name: Rebuild the dist/ directory + run: cd synopsys-task && npm run build && npm run package + + - name: Compare the expected and actual dist/ directories + run: | + cd synopsys-task + if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then + echo "Detected uncommitted changes after build. See status below:" + git diff + exit 1 + fi + id: diff + + - name: versioning + id: version-update + env: + GITHUB_TOKEN: ${{ secrets.GITHUBTOKEN }} + run: | + extension_name=$(jq -r '.name' < vss-extension.json) + echo "EXTENSION_NAME=$extension_name" >> $GITHUB_ENV + echo "EXTENSION NAME: "$extension_name + current_extension_version=${{ github.event.inputs.version }} + echo "CURRENT_VERSION=$current_extension_version" >> $GITHUB_ENV + echo "CURRENT EXTENSION VERSION: " $current_extension_version + current_major=$(echo $current_extension_version | awk -F. '{print $1}') + current_minor=$(echo $current_extension_version | awk -F. '{print $2}') + current_patch=$(echo $current_extension_version | awk -F. '{print $3}') + + new_version=$current_extension_version + echo "Updating vss-extension.json with the new version: ${new_version}" + jq --arg new_version "$new_version" '.version = $new_version' vss-extension.json > vss-extension.json.tmp && mv vss-extension.json.tmp vss-extension.json + echo "Updated vss-extension.json file" + cat vss-extension.json + echo + + echo "Updating vss-extension-dev.json with the new version: ${new_version}" + jq --arg new_version "$new_version" '.version = $new_version' vss-extension-dev.json > vss-extension-dev.json.tmp && mv vss-extension-dev.json.tmp vss-extension-dev.json + echo "Updated vss-extension-dev.json file" + cat vss-extension-dev.json + echo + + cd synopsys-task + echo "Updating package.json with the new version: ${new_version}" + jq --arg new_version "$new_version" '.version = $new_version' package.json > package.json.tmp && mv package.json.tmp package.json + echo "Updated package.json file" + cat package.json + echo + + echo "Updating package-lock.json with the new version: ${new_version}" + jq --arg new_version "$new_version" '(.version = $new_version) | (.packages[""].version = $new_version)' package-lock.json > package-lock.json.tmp && mv package-lock.json.tmp package-lock.json + echo "Updated package-lock.json file" + echo + + echo "Updating task.json with the new version: ${new_version}" + jq --argjson major "$current_major" --argjson minor "$current_minor" --argjson patch "$current_patch" '(.version.Major = $major) | (.version.Minor = $minor) | (.version.Patch = $patch)' task.json > task.json.tmp && mv task.json.tmp task.json + echo "Updated task.json file" + + echo "NEW_VERSION=$new_version" >> $GITHUB_ENV + + - name: update extension version in file + id: update-extension-version + env: + GITHUB_TOKEN: ${{ secrets.GITHUBTOKEN }} + run: | + echo "Updating extension version in vss-extension.json, vss-extension-dev.json, extension_version.txt, package.json, package-lock.json & task.json file" + git config --local user.name "$(git log -n 1 --pretty=format:%an)" + git config --local user.email "$(git log -n 1 --pretty=format:%ae)" + git checkout -b extension_version_update + git pull origin extension_version_update --rebase || true + git add vss-extension.json vss-extension-dev.json extension_version.txt + cd synopsys-task + git add package.json package-lock.json task.json + git commit -m "upgrade extension version to ${{ env.NEW_VERSION }} [skip ci]" + git push origin extension_version_update --force + gh pr create --base main --head extension_version_update --title "Extension version upgrade to ${{ env.NEW_VERSION }}" --body "${{ env.EXTENSION_NAME }} version upgrade to ${{ env.NEW_VERSION }}" --fill + echo "Successful updated extension version in vss-extension.json, vss-extension-dev.json, extension_version.txt, package.json, package-lock.json & task.json file..." \ No newline at end of file From c9e5332311b0312eace9518bba12f75496c24cb0 Mon Sep 17 00:00:00 2001 From: Siyaram Meena Date: Mon, 30 Sep 2024 13:58:16 +0530 Subject: [PATCH 2/2] SIGINT-2290: Prod release process for ADO --- .github/workflows/create-tag.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-tag.yml b/.github/workflows/create-tag.yml index 68245a0..e69c45e 100644 --- a/.github/workflows/create-tag.yml +++ b/.github/workflows/create-tag.yml @@ -62,8 +62,8 @@ jobs: echo "$processed_body">>$GITHUB_ENV echo "EOF">>$GITHUB_ENV - - name: Create Release - id: create_release + - name: Create tag + id: create_tag uses: actions/create-release@latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token