# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml trigger: - master - release/* - hackathon/* pr: - master - release/* variables: SiteDirectory: '$(Build.SourcesDirectory)/wizis-web' MonoRepoDirectory: '$(Build.SourcesDirectory)/syz' NgSyzDirectory: '$(Build.SourcesDirectory)/packages/ng-syz' resources: repositories: - repository: site type: git name: DesignSystem/wizis-web ref: refs/heads/master - repository: this type: github endpoint: wizsolucoesAdminPAT name: wizsolucoes/syz ref: '$(Build.SourceBranch)' pool: vmImage: 'ubuntu-latest' stages: - stage: Stage displayName: 'Stage Solution' condition: or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), startsWith(variables['Build.SourceBranch'], 'refs/heads/hackathon/')) jobs: - job: NgSyzLib pool: vmImage: 'windows-latest' displayName: 'NgSyz lib CI' steps: - checkout: this - task: Npm@1 displayName: 'Install dependencies' inputs: command: 'install' workingDir: $(NgSyzDirectory) - task: SonarQubePrepare@4 continueOnError: true inputs: SonarQube: 'SonarQube' scannerMode: 'CLI' configMode: 'manual' cliProjectKey: 'wizsolucoes.syz.ng-syz.ng-syz' cliProjectName: 'wizsolucoes.syz.ng-syz.ng-syz' cliProjectVersion: $(Build.BuildNumber) cliSources: 'packages/ng-syz/projects/ng-syz/src' extraProperties: | sonar.typescript.lcov.reportPaths=$(System.DefaultWorkingDirectory)/packages/ng-syz/coverage/ng-syz/lcov.info sonar.exclusions=**/node_modules/**,**/*.spec.ts,**/main.ts,**/polyfills.ts,**/environments/**,**/*.module.ts,**/test.ts sonar.tests=packages/ng-syz/projects/ng-syz/src/lib sonar.test.inclusions=**/*.spec.ts sonar.analysis.project=$(System.TeamProject) sonar.analysis.repositoryId=$(Build.Repository.ID) sonar.analysis.pullRequestId=$(System.PullRequest.PullRequestId) - task: Npm@1 displayName: 'Build lib' inputs: command: custom verbose: true customCommand: 'run build:lib:prod' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Test lib' inputs: command: custom verbose: true customCommand: 'run test:lib:coverage' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Lint lib' inputs: command: custom verbose: true customCommand: 'run lint:lib' workingDir: $(NgSyzDirectory) - task: SonarQubeAnalyze@4 continueOnError: true - task: SonarQubePublish@4 continueOnError: true inputs: pollingTimeoutSec: '300' - job: NgSyzApp pool: vmImage: 'windows-latest' displayName: 'NgSyz app CI/CD to staging' steps: - checkout: this - script: | echo Surge login: $(SURGE_LOGIN) echo Surge token: $(SURGE_TOKEN) displayName: 'Echo surge variables' - task: Npm@1 displayName: 'Install dependencies' inputs: command: 'install' workingDir: $(NgSyzDirectory) - task: SonarQubePrepare@4 continueOnError: true inputs: SonarQube: 'SonarQube' scannerMode: 'CLI' configMode: 'manual' cliProjectKey: 'wizsolucoes.syz.ng-syz.app' cliProjectName: 'wizsolucoes.syz.ng-syz.app' cliProjectVersion: $(Build.BuildNumber) cliSources: 'packages/ng-syz/projects/app/src' extraProperties: | sonar.typescript.lcov.reportPaths=$(System.DefaultWorkingDirectory)/packages/ng-syz/coverage/app/lcov.info sonar.exclusions=**/node_modules/**,**/*.spec.ts,**/main.ts,**/polyfills.ts,**/environments/**,**/*.module.ts,**/test.ts sonar.tests=packages/ng-syz/projects/app/src/app sonar.test.inclusions=**/*.spec.ts sonar.analysis.project=$(System.TeamProject) sonar.analysis.repositoryId=$(Build.Repository.ID) sonar.analysis.pullRequestId=$(System.PullRequest.PullRequestId) - task: Npm@1 displayName: 'Build lib' inputs: command: custom verbose: true customCommand: 'run build:lib:prod' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Build app' inputs: command: custom verbose: true customCommand: 'run build:app:prod' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Test app' inputs: command: custom verbose: true customCommand: 'run test:app:coverage' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Lint app' inputs: command: custom verbose: true customCommand: 'run lint:app' workingDir: $(NgSyzDirectory) - task: SonarQubeAnalyze@4 continueOnError: true - task: SonarQubePublish@4 continueOnError: true inputs: pollingTimeoutSec: '300' - ${{ if startsWith(variables['Build.SourceBranch'], 'refs/heads/release/') }}: - task: AzureFileCopy@4 displayName: 'Publish app to storage' inputs: SourcePath: '$(NgSyzDirectory)/dist/app/*' azureSubscription: 'AmbientesDevHml' Destination: 'AzureBlob' storage: 'sysstorybookhmlstg' ContainerName: '$web' - ${{ if startsWith(variables['Build.SourceBranch'], 'refs/heads/hackathon/') }}: - script: | echo Surge login: $(SURGE_LOGIN) echo Surge token: $(SURGE_TOKEN) npm i -g surge surge --project $(NgSyzDirectory)/dist/app --domain wiz-hackasyz-2021-$(Build.SourceBranchName).surge.sh displayName: 'Publish to Surge' - job: Site displayName: 'Publish Syz site to staging' steps: - checkout: this - checkout: site # Build components - task: NodeTool@0 displayName: 'Use Node 14' inputs: versionSpec: '14.x' - task: Npm@1 displayName: 'Install dependencies' inputs: command: ci workingDir: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Bootstrap' inputs: command: custom verbose: false customCommand: 'run bootstrap' workingDir: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Build' inputs: command: custom verbose: false customCommand: 'run build' workingDir: $(MonoRepoDirectory) # Build site documentaion and publish site - task: Npm@1 displayName: 'Install site dependencies' inputs: command: ci workingDir: $(SiteDirectory) - script: node docs.js --site-path=$(SiteDirectory) displayName: 'Generate site documentation' workingDirectory: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Build site' inputs: command: custom verbose: false customCommand: 'run build' workingDir: $(SiteDirectory) - task: CopyFiles@2 displayName: 'Copy site dist to artifact staging directory' inputs: SourceFolder: '$(SiteDirectory)/dist/angular-wiz-repositorio' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: ArchiveFiles@2 displayName: 'Archive site dist' inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)' includeRootFolder: false - task: AzureWebApp@1 displayName: 'Deploy site to Azure Web App' inputs: azureSubscription: '$(HML_SITE_AZURE_SUBSCRIPTION)' appType: webApp appName: '$(HML_SITE_APP_NAME)' package: $(System.ArtifactsDirectory)/*.zip - stage: Publish condition: eq(variables['build.sourceBranch'], 'refs/heads/master') jobs: - job: Publish displayName: 'Publish libs and SYZ site' condition: succeeded() steps: - checkout: this persistCredentials: 'true' - checkout: site # Configure Lerna Bot - task: CmdLine@2 displayName: Configure Lerna Bot inputs: script: | git config --global user.email "lernabot@wizsolucoes.com.br" git config --global user.name "Lerna bot" workingDirectory: $(MonoRepoDirectory) - task: CmdLine@2 displayName: Checkout $(Build.SourceBranchName) inputs: script: 'git checkout $(Build.SourceBranchName)' workingDirectory: $(MonoRepoDirectory) # Build and test components - task: NodeTool@0 displayName: 'Use Node 14' inputs: versionSpec: '14.x' - task: Npm@1 displayName: 'Install dependencies' inputs: command: ci workingDir: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Bootstrap' inputs: command: custom verbose: false customCommand: 'run bootstrap' workingDir: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Build' inputs: command: custom verbose: false customCommand: 'run build' workingDir: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Test' inputs: command: 'custom' verbose: false customCommand: 'run test' workingDir: $(MonoRepoDirectory) # Version and publish components - task: Npm@1 displayName: 'Bump versions' inputs: command: 'custom' verbose: true customCommand: 'run version' workingDir: $(MonoRepoDirectory) # Build before publishing to get updated packages.json version - task: Npm@1 displayName: 'Build' inputs: command: custom verbose: false customCommand: 'run build' workingDir: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Publish' inputs: command: 'custom' customCommand: 'run release' customEndpoint: 'npmjs' workingDir: $(MonoRepoDirectory) # Build site documentaion and publish site - task: Npm@1 displayName: 'Install site dependencies' inputs: command: ci workingDir: $(SiteDirectory) - script: node docs.js --site-path=$(SiteDirectory) displayName: 'Generate site documentation' workingDirectory: $(MonoRepoDirectory) - task: Npm@1 displayName: 'Build site' inputs: command: custom verbose: false customCommand: 'run build' workingDir: $(SiteDirectory) - task: CopyFiles@2 displayName: 'Copy site dist to artifact staging directory' inputs: SourceFolder: '$(SiteDirectory)/dist/angular-wiz-repositorio' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: ArchiveFiles@2 displayName: 'Archive site dist' inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)' includeRootFolder: false - task: AzureWebApp@1 displayName: 'Deploy site to Azure Web App' inputs: azureSubscription: '$(PRD_SITE_AZURE_SUBSCRIPTION)' appType: webApp appName: '$(PRD_SITE_APP_NAME)' package: $(System.ArtifactsDirectory)/*.zip - job: NgSyz dependsOn: Publish pool: vmImage: 'windows-latest' displayName: 'Publish NgSyz to production' steps: - checkout: this - task: Npm@1 displayName: 'Install dependencies' inputs: command: 'install' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Build lib' inputs: command: custom verbose: true customCommand: 'run build:lib:prod' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Test lib' inputs: command: custom verbose: true customCommand: 'run test:lib' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Build app' inputs: command: custom verbose: true customCommand: 'run build:app:prod' workingDir: $(NgSyzDirectory) - task: Npm@1 displayName: 'Test app' inputs: command: custom verbose: true customCommand: 'run test:app' workingDir: $(NgSyzDirectory) - task: AzureFileCopy@4 displayName: 'Publish app to storage' inputs: SourcePath: '$(NgSyzDirectory)/dist/app/*' azureSubscription: 'AmbienteCorporativoExterior' Destination: 'AzureBlob' storage: 'sysstorybookprdstg' ContainerName: '$web'