diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 00000000..721da6c6 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,158 @@ +name: 2.5.$(Rev:r) + +trigger: +- dev +- latest + +stages: +- stage: build + displayName: Build stage + jobs: + + # ------------------------------- + # BUILD - LINUX + # ------------------------------- + + - job: buildLinux + displayName: Linux Build + timeoutInMinutes: 60 + cancelTimeoutInMinutes: 1 + pool: + name: Azure Pipelines + vmImage: ubuntu-latest + steps: + - task: CmdLine@2 + displayName: Disable dev flag + inputs: + script: | + sudo apt-get install jq -y + mv package.json pkg-temp.json + jq -r '.dev |= false' pkg-temp.json > package.json + rm pkg-temp.json + workingDirectory: '$(Build.SourcesDirectory)' + + - task: CmdLine@2 + displayName: Set Package Version + inputs: + script: | + mv package.json pkg-temp.json + jq -r '.version |= "$(Build.BuildNumber)"' pkg-temp.json > package.json + rm pkg-temp.json + cat package.json + workingDirectory: '$(Build.SourcesDirectory)' + + - task: Docker@2 + displayName: Build Docker image + inputs: + containerRegistry: Docker Hub + repository: requarks/wiki + Dockerfile: dev/build/Dockerfile + buildContext: '$(System.DefaultWorkingDirectory)' + tags: | + canary + canary-$(Build.BuildNumber) + addPipelineData: false + + - task: CmdLine@2 + displayName: Extract compiled files + inputs: + script: | + docker create --name wiki requarks/wiki:canary + docker cp wiki:/wiki $(Build.StagingDirectory) + docker rm wiki + rm $(Build.StagingDirectory)/wiki/config.yml + cp $(System.DefaultWorkingDirectory)/config.sample.yml $(Build.StagingDirectory)/wiki/config.sample.yml + find $(Build.StagingDirectory)/wiki/ -printf "%P\n" | tar -czf wiki-js.tar.gz --no-recursion -C $(Build.StagingDirectory)/wiki/ -T - + workingDirectory: '$(Build.SourcesDirectory)' + + - task: PublishBuildArtifacts@1 + displayName: Publish Build Artifacts + inputs: + PathtoPublish: 'wiki-js.tar.gz' + ArtifactName: 'drop' + + # ------------------------------- + # TESTS - CYPRESS E2E TESTS + # ------------------------------- + + - job: testCypress + displayName: Cypress E2E Tests + dependsOn: linuxBuild + strategy: + maxParallel: 5 + matrix: + MariaDB: + MATRIXENV: mariadb + MySQL: + MATRIXENV: mysql + MSSQLServer: + MATRIXENV: mssql + PostgreSQL: + MATRIXENV: postgres + SQLite: + MATRIXENV: sqlite + timeoutInMinutes: 30 + cancelTimeoutInMinutes: 1 + pool: + name: Azure Pipelines + vmImage: ubuntu-latest + steps: + - task: Bash@3 + displayName: Setup Environment + inputs: + targetType: filePath + filePath: './dev/cypress/ci-setup.sh' + workingDirectory: '$(Build.SourcesDirectory)' + + - script: | + docker run --name cypress --ipc=host --shm-size 1G -v $BUILD_SOURCESDIRECTORY:/e2e -w /e2e cypress/included:4.9.0 --record --key "$(CYPRESS_KEY)" --headless --group "$MATRIXENV" --ci-build-id "$BUILD_BUILDNUMBER" --config baseUrl=http://172.17.0.1:3000' + displayName: 'Run Tests' + + # ------------------------------- + # BUILD - WINDOWS + # ------------------------------- + + - job: buildWindows + displayName: Windows Build + dependsOn: linuxBuild + pool: + name: Azure Pipelines + vmImage: windows-latest + timeoutInMinutes: 30 + cancelTimeoutInMinutes: 1 + steps: + - task: NodeTool@0 + displayName: 'Use Node 14.x' + inputs: + versionSpec: 14.x + + - task: 'geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3' + displayName: 'Use Yarn 1.x' + + - task: DownloadBuildArtifacts@0 + displayName: 'Download Build Artifacts' + inputs: + artifactName: drop + + - script: | + mkdir -p $(Build.SourcesDirectory)\win + tar -xzf $(System.ArtifactsDirectory)\drop\wiki-js.tar.gz -C $(Build.SourcesDirectory)\win --exclude=node_modules + displayName: 'Extract build' + - script: 'yarn --production --frozen-lockfile --non-interactive' + workingDirectory: win + displayName: 'Install dependencies' + + - task: ArchiveFiles@2 + displayName: 'Archive app' + inputs: + rootFolderOrFile: '$(System.DefaultWorkingDirectory)\win' + includeRootFolder: false + archiveType: tar + archiveFile: 'wiki-js-windows.tar.gz' + + - task: PublishBuildArtifacts@1 + displayName: Publish Build Artifacts + inputs: + PathtoPublish: 'wiki-js-windows.tar.gz' + ArtifactName: 'drop-win' + diff --git a/dev/cypress/ci-setup.sh b/dev/cypress/ci-setup.sh index 3c9f94c7..0c9799f0 100644 --- a/dev/cypress/ci-setup.sh +++ b/dev/cypress/ci-setup.sh @@ -1,4 +1,4 @@ -case $TEST_MATRIX in +case $MATRIXENV in postgres) echo "Using PostgreSQL..." docker run -d -p 5432:5432 --name db --network="host" -e "POSTGRES_PASSWORD=Password123!" -e "POSTGRES_USER=wiki" -e "POSTGRES_DB=wiki" postgres:11