Module CI #26
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# v3.200.35 | |
name: Module CI | |
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 18 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '18' | |
- name: Set up Java 17 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'temurin' | |
java-version: '17' | |
- name: Set RELEASE_STATUS | |
if: ${{ github.ref == 'refs/heads/master' && github.event_name == 'push' }} | |
run: | | |
echo "RELEASE_STATUS=true" >> $GITHUB_ENV | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install VirtoCommerce.GlobalTool | |
uses: VirtoCommerce/vc-github-actions/setup-vcbuild@master | |
- name: Install dotnet-sonarscanner | |
run: dotnet tool install --global dotnet-sonarscanner | |
- name: Get Changelog | |
id: changelog | |
uses: VirtoCommerce/vc-github-actions/changelog-generator@master | |
- name: Get Artifact Version | |
uses: VirtoCommerce/vc-github-actions/get-image-version@master | |
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' }} | |
uses: VirtoCommerce/vc-github-actions/add-version-suffix@master | |
with: | |
versionSuffix: ${{ env.VERSION_SUFFIX }} | |
- name: SonarCloud Begin | |
uses: VirtoCommerce/vc-github-actions/sonar-scanner-begin@master | |
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@master | |
- name: Quality Gate | |
uses: VirtoCommerce/vc-github-actions/sonar-quality-gate@master | |
with: | |
login: ${{secrets.SONAR_TOKEN}} | |
- name: Packaging | |
run: vc-build Compress -skip Clean+Restore+Compile+Test | |
- name: Publish Nuget | |
if: ${{ (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/master') && github.event_name != 'workflow_dispatch' }} | |
uses: VirtoCommerce/vc-github-actions/publish-nuget@master | |
- name: Publish to Blob | |
if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev' || github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/master') }} | |
id: blobRelease | |
uses: VirtoCommerce/vc-github-actions/publish-blob-release@master | |
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@master | |
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@master | |
with: | |
artifactUrl: ${{ steps.blobRelease.outputs.packageUrl }} | |
repoOrg: ${{ github.repository_owner }} | |
downloadComment: 'Artifact URL:' | |
- name: Publish Github Release | |
if: ${{ github.ref == 'refs/heads/master' }} | |
id: githubRelease | |
with: | |
changelog: ${{ steps.changelog.outputs.changelog }} | |
organization: ${{ github.repository_owner }} | |
uses: VirtoCommerce/vc-github-actions/publish-github-release@master | |
- name: Set artifactUrl value | |
id: artifactUrl | |
run: | | |
if [ '${{ github.ref }}' = 'refs/heads/master' ]; 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'}} | |
uses: VirtoCommerce/vc-github-actions/cloud-create-deploy-matrix@master | |
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.ref == 'refs/heads/master') && github.event_name != 'workflow_dispatch' }} | |
uses: VirtoCommerce/vc-github-actions/setup-git-credentials-github@master | |
with: | |
githubToken: ${{ secrets.REPO_TOKEN }} | |
- name: Publish Manifest | |
if: ${{ (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/master') && github.event_name != 'workflow_dispatch' }} | |
uses: VirtoCommerce/vc-github-actions/publish-manifest@master | |
with: | |
packageUrl: ${{ steps.artifactUrl.outputs.download_url }} | |
- name: Update virtocommerce.com | |
if: ${{ github.ref == 'refs/heads/master' }} | |
uses: VirtoCommerce/vc-github-actions/update-virtocommercecom@master | |
with: | |
githubToken: ${{ secrets.REPO_TOKEN }} | |
login: ${{ secrets.VIRTOCOMMERCE_APP_ID }} | |
password: ${{ secrets.VIRTOCOMMERCE_SECRET }} | |
moduleId: ${{ steps.artifact_ver.outputs.moduleId }} | |
moduleDescription: ${{ steps.artifact_ver.outputs.moduleDescription }} | |
projectUrl: ${{ steps.artifact_ver.outputs.projectUrl }} | |
iconUrl: ${{ steps.artifact_ver.outputs.iconUrl }} | |
- name: Parse Jira Keys from All Commits | |
uses: VirtoCommerce/vc-github-actions/get-jira-keys@master | |
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@v3.200.35 | |
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/dev')) && | |
github.event_name == 'push' }} | |
needs: ci | |
uses: VirtoCommerce/.github/.github/workflows/deploy-cloud.yml@v3.200.35 | |
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 |