From 0b33ac1d8640ed7fc5cecb9bc962be9e8440a6c8 Mon Sep 17 00:00:00 2001 From: Andrew <56427313+AndrewEhlo@users.noreply.github.com> Date: Thu, 4 Apr 2024 17:56:39 +0500 Subject: [PATCH] Create module-ci-common.yml --- .github/workflows/module-ci-common.yml | 271 +++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 .github/workflows/module-ci-common.yml diff --git a/.github/workflows/module-ci-common.yml b/.github/workflows/module-ci-common.yml new file mode 100644 index 0000000..76ad1e0 --- /dev/null +++ b/.github/workflows/module-ci-common.yml @@ -0,0 +1,271 @@ +# v3.800.4 +# https://virtocommerce.atlassian.net/browse/VCST-488 +name: Module CI common + +on: + workflow_dispatch: + push: + paths-ignore: + - '.github/**' + - 'docs/**' + - 'build/**' + - 'README.md' + - 'LICENSE' + - '**/argoDeploy.json' + - '**/cloudDeploy.json' + - samples/** + branches: + [master, dev] + pull_request: + branches: + [master, dev] + paths-ignore: + - 'docs/**' + - 'build/**' + - 'README.md' + - 'LICENSE' + - '**/argoDeploy.json' + - '**/cloudDeploy.json' + - samples/** + +jobs: + ci: + if: ${{ github.actor != 'dependabot[bot]' && + (github.event.pull_request.head.repo.full_name == github.repository || + github.event.pull_request.head.repo.full_name == '') }} # Check that PR not from forked repo and not from Dependabot + runs-on: ubuntu-20.04 + env: + CLOUD_INSTANCE_BASE_URL: ${{secrets.CLOUD_INSTANCE_BASE_URL}} + CLIENT_ID: ${{secrets.CLIENT_ID}} + CLIENT_SECRET: ${{secrets.CLIENT_SECRET}} + SONAR_TOKEN: ${{secrets.SONAR_TOKEN}} + GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }} + NUGET_KEY: ${{ secrets.NUGET_KEY }} + BLOB_SAS: ${{ secrets.BLOB_TOKEN }} + VERSION_SUFFIX: '' + BUILD_STATE: 'failed' + RELEASE_STATUS: 'false' + + outputs: + artifactUrl: ${{ steps.artifactUrl.outputs.download_url }} + blobId: ${{ steps.blobRelease.outputs.blobId }} + jira-keys: ${{ steps.jira_keys.outputs.jira-keys }} + version: ${{ steps.artifact_ver.outputs.shortVersion }} + moduleId: ${{ steps.artifact_ver.outputs.moduleId }} + matrix: ${{ steps.deployment-matrix.outputs.matrix }} + run-e2e: ${{ steps.run-e2e.outputs.result }} + + steps: + + - name: Set up Node 20 + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + - name: Set RELEASE_STATUS + if: ${{ (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') && github.event_name == 'push' }} + run: | + echo "RELEASE_STATUS=true" >> $GITHUB_ENV + + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install VirtoCommerce.GlobalTool + uses: VirtoCommerce/vc-github-actions/setup-vcbuild@VCST-571 + + - name: Install dotnet-sonarscanner + run: dotnet tool install --global dotnet-sonarscanner + + - name: Get Changelog + id: changelog + uses: VirtoCommerce/vc-github-actions/changelog-generator@VCST-571 + + - name: Get Artifact Version + uses: VirtoCommerce/vc-github-actions/get-image-version@VCST-571 + id: artifact_ver + + - name: Set VERSION_SUFFIX variable + run: | + if [ '${{ github.event_name }}' = 'workflow_dispatch' ]; then + echo "VERSION_SUFFIX=${{ steps.artifact_ver.outputs.fullSuffix }}" >> $GITHUB_ENV + else + echo "VERSION_SUFFIX=${{ steps.artifact_ver.outputs.suffix }}" >> $GITHUB_ENV + fi; + - name: Add version suffix + if: ${{ github.ref != 'refs/heads/master' || github.ref != 'refs/heads/main' }} + uses: VirtoCommerce/vc-github-actions/add-version-suffix@VCST-571 + with: + versionSuffix: ${{ env.VERSION_SUFFIX }} + + - name: SonarCloud Begin + uses: VirtoCommerce/vc-github-actions/sonar-scanner-begin@VCST-571 + with: + repoOrg: ${{ github.repository_owner }} + sonarOrg: ${{secrets.SONAR_ORG_KEY}} + + - name: Build + run: vc-build Compile + + - name: Unit Tests + run: vc-build Test -skip + + - name: SonarCloud End + uses: VirtoCommerce/vc-github-actions/sonar-scanner-end@VCST-571 + + - name: Quality Gate + uses: VirtoCommerce/vc-github-actions/sonar-quality-gate@VCST-571 + with: + login: ${{secrets.SONAR_TOKEN}} + + - name: Packaging + run: vc-build Compress -skip Clean+Restore+Compile+Test + + - name: Publish Nuget + if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} + uses: VirtoCommerce/vc-github-actions/publish-nuget@VCST-571 + + - name: Publish to Blob + if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev' || github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/master') || (github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/main') }} + id: blobRelease + uses: VirtoCommerce/vc-github-actions/publish-blob-release@VCST-571 + with: + blobSAS: ${{ secrets.BLOB_TOKEN }} + blobUrl: ${{ vars.BLOB_URL }} + + - name: Add Jira link + if: ${{ github.event_name == 'pull_request' }} + uses: VirtoCommerce/vc-github-actions/publish-jira-link@VCST-571 + with: + branchName: ${{ github.head_ref }} + repoOrg: ${{ github.repository_owner }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Add link to PR + if: ${{ github.event_name == 'pull_request' }} + uses: VirtoCommerce/vc-github-actions/publish-artifact-link@VCST-571 + with: + artifactUrl: ${{ steps.blobRelease.outputs.packageUrl }} + repoOrg: ${{ github.repository_owner }} + downloadComment: 'Artifact URL:' + + - name: Publish Github Release + if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} + id: githubRelease + with: + changelog: ${{ steps.changelog.outputs.changelog }} + organization: ${{ github.repository_owner }} + uses: VirtoCommerce/vc-github-actions/publish-github-release@VCST-571 + + - name: Set artifactUrl value + id: artifactUrl + run: | + if [ '${{ github.ref }}' = 'refs/heads/master' ] || [ '${{ github.ref }}' = 'refs/heads/main' ]; then + echo "download_url=${{ steps.githubRelease.outputs.downloadUrl }}" >> $GITHUB_OUTPUT + else + echo "download_url=${{ steps.blobRelease.outputs.packageUrl }}" >> $GITHUB_OUTPUT + fi; + + - name: Create deployment matrix + if: ${{ github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} + uses: VirtoCommerce/vc-github-actions/cloud-create-deploy-matrix@VCST-571 + id: deployment-matrix + with: + deployConfigPath: '.deployment/module/cloudDeploy.json' + releaseBranch: 'master' + + - name: Check commit message for version number + id: run-e2e + run: | + if [[ "${{ github.event.head_commit.message }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; + then + echo "result=false" >> $GITHUB_OUTPUT + else + echo "result=true" >> $GITHUB_OUTPUT + fi + + - name: Setup Git Credentials + if: ${{ (github.ref == 'refs/heads/dev' && github.event_name != 'workflow_dispatch') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} + uses: VirtoCommerce/vc-github-actions/setup-git-credentials-github@VCST-571 + with: + githubToken: ${{ secrets.REPO_TOKEN }} + + - name: Publish Manifest + if: ${{ (github.ref == 'refs/heads/dev' && github.event_name != 'workflow_dispatch') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }} + uses: VirtoCommerce/vc-github-actions/publish-manifest@VCST-571 + with: + packageUrl: ${{ steps.artifactUrl.outputs.download_url }} + + - name: Parse Jira Keys from All Commits + uses: VirtoCommerce/vc-github-actions/get-jira-keys@VCST-571 + if: always() + id: jira_keys + with: + release: ${{ env.RELEASE_STATUS }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Push Build Info to Jira + if: ${{ env.CLOUD_INSTANCE_BASE_URL != 0 && env.CLIENT_ID != 0 && env.CLIENT_SECRET != 0 && steps.jira_keys.outputs.jira-keys != '' && always() }} + id: push_build_info_to_jira + uses: VirtoCommerce/jira-upload-build-info@master + with: + cloud-instance-base-url: '${{ secrets.CLOUD_INSTANCE_BASE_URL }}' + client-id: '${{ secrets.CLIENT_ID }}' + client-secret: '${{ secrets.CLIENT_SECRET }}' + pipeline-id: '${{ github.repository }} ${{ github.workflow }}' + build-number: ${{ github.run_number }} + build-display-name: 'Workflow: ${{ github.workflow }} (#${{ github.run_number }})' + build-state: '${{ env.BUILD_STATE }}' + build-url: '${{github.event.repository.url}}/actions/runs/${{github.run_id}}' + update-sequence-number: '${{ github.run_id }}' + last-updated: '${{github.event.head_commit.timestamp}}' + issue-keys: '${{ steps.jira_keys.outputs.jira-keys }}' + commit-id: '${{ github.sha }}' + repo-url: '${{ github.event.repository.url }}' + build-ref-url: '${{ github.event.repository.url }}/actions/runs/${{ github.run_id }}' + + - name: Confirm Jira Build Output + if: success() + run: | + echo "Jira Upload Build Info response: ${{ steps.push_build_info_to_jira.outputs.response }}" + + module-katalon-tests: + if: ${{ ((github.ref == 'refs/heads/dev') && (github.event_name == 'push') && (needs.ci.outputs.run-e2e == 'true')) || + (github.event_name == 'workflow_dispatch')}} + needs: 'ci' + uses: VirtoCommerce/.github/.github/workflows/e2e.yml@VCST-571 + with: + katalonRepo: 'VirtoCommerce/vc-quality-gate-katalon' + katalonRepoBranch: 'dev' + testSuite: 'Test Suites/Modules/Platform_collection' + installModules: 'true' + installCustomModule: 'true' + customModuleId: ${{ needs.ci.outputs.moduleId }} + customModuleUrl: ${{ needs.ci.outputs.artifactUrl }} + platformDockerTag: 'dev-linux-latest' + storefrontDockerTag: 'dev-linux-latest' + secrets: + envPAT: ${{ secrets.REPO_TOKEN }} + katalonApiKey: ${{ secrets.KATALON_API_KEY }} + + deploy-cloud: + if: ${{ (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && github.event_name == 'push' }} + needs: ci + uses: VirtoCommerce/.github/.github/workflows/deploy-cloud.yml@VCST-571 + with: + releaseSource: module + moduleId: ${{ needs.ci.outputs.moduleId }} + moduleVer: ${{ needs.ci.outputs.version }} + moduleBlob: ${{ needs.ci.outputs.blobId }} + jiraKeys: ${{ needs.ci.outputs.jira-keys }} + argoServer: 'argo.virtocommerce.cloud' + matrix: '{"include":${{ needs.ci.outputs.matrix }}}' + secrets: inherit