trigger: - main pool: vmImage: "ubuntu-latest" variables: major: $(VERSION_MAJOR) minor: $(VERSION_MINOR) prefix: $[format('{0}.{1}', variables['major'], variables['minor'])] patch: $[counter(variables['prefix'], 100)] buildNumber: $(major).$(minor).$(patch) steps: - task: PowerShell@2 displayName: "Setting build version" inputs: targetType: "inline" script: | Write-Host "##vso[build.updatebuildnumber]$(buildNumber)" - task: UseNode@1 displayName: "Setting up node" inputs: version: "22" - task: Bash@3 inputs: targetType: "inline" script: | rm -rf node_modules npm clean-install workingDirectory: "$(System.DefaultWorkingDirectory)/functions" - task: PowerShell@2 displayName: "Set version in package.json" inputs: targetType: "inline" script: | $pkg = Get-Content -Path "$(System.DefaultWorkingDirectory)/functions/package.json" -Raw | ConvertFrom-Json $pkg.version = "$(buildNumber)" $pkg | ConvertTo-Json -Depth 100 | Set-Content -Path "$(System.DefaultWorkingDirectory)/functions/package.json" - task: CmdLine@2 displayName: "Copy .env.example to .env" inputs: script: | cp "$(System.DefaultWorkingDirectory)/functions/.env.example" "$(System.DefaultWorkingDirectory)/functions/.env" - task: replacetokens@6 displayName: "Replace tokens in .env file" inputs: root: "$(System.DefaultWorkingDirectory)/functions/" sources: .env - task: Npm@1 displayName: "npm run build" inputs: command: "custom" workingDir: "$(System.DefaultWorkingDirectory)/functions" customCommand: "run build" - task: CmdLine@2 displayName: "install firebase tools" inputs: script: curl -sL firebase.tools | upgrade=true bash workingDirectory: $(Agent.ToolsDirectory) - task: Bash@3 displayName: "Deploy functions to firebase" inputs: targetType: "inline" workingDirectory: "$(Build.SourcesDirectory)" script: | npm install -g typescript cd functions npm install npm run build cd $(Build.SourcesDirectory) firebase deploy --only functions --token '$(FIREBASE_TOKEN)' --non-interactive - task: DeleteFiles@1 displayName: "Remove node_modules, *.log files, src directory from functions directory" inputs: SourceFolder: "$(System.DefaultWorkingDirectory)/functions" Contents: | node_modules/** *.log - task: ArchiveFiles@2 displayName: "Archive functions directory" inputs: rootFolderOrFile: "$(System.DefaultWorkingDirectory)/functions" includeRootFolder: false archiveFile: "$(System.DefaultWorkingDirectory)/fitlien-services-$(buildNumber).zip" - task: CopyFiles@2 displayName: "Copy archive to staging directory" inputs: SourceFolder: "$(System.DefaultWorkingDirectory)" Contents: "fitlien-services-$(buildNumber).zip" TargetFolder: "$(System.ArtifactsDirectory)"