diff --git a/.azuredevops/pipelines/publish-job.yml b/.azuredevops/pipelines/publish-job.yml index 78697830b..435582858 100644 --- a/.azuredevops/pipelines/publish-job.yml +++ b/.azuredevops/pipelines/publish-job.yml @@ -45,74 +45,74 @@ stages: steps: - template: templates/publish-os-steps.yml -- stage: deploy - jobs: - - job: - condition: and(succeeded(), eq(variables.isMain, true)) - steps: - - task: DownloadPipelineArtifact@2 - inputs: - buildType: 'current' - targetPath: '$(System.ArtifactsDirectory)' +# - stage: deploy +# jobs: +# - job: +# condition: and(succeeded(), eq(variables.isMain, true)) +# steps: +# - task: DownloadPipelineArtifact@2 +# inputs: +# buildType: 'current' +# targetPath: '$(System.ArtifactsDirectory)' - - task: PowerShell@2 - displayName: 'Get Release Notes' - inputs: - targetType: 'inline' - script: | - $response = Invoke-WebRequest -Uri "https://ombireleasenote.azurewebsites.net/api/ReleaseNotesFunction?buildId=$(Build.BuildId)" - Write-Host "##vso[task.setvariable variable=ReleaseNotes;]$response" +# - task: PowerShell@2 +# displayName: 'Get Release Notes' +# inputs: +# targetType: 'inline' +# script: | +# $response = Invoke-WebRequest -Uri "https://ombireleasenote.azurewebsites.net/api/ReleaseNotesFunction?buildId=$(Build.BuildId)" +# Write-Host "##vso[task.setvariable variable=ReleaseNotes;]$response" - - task: GitHubRelease@1 - displayName: 'Ombi.Releases Release' - inputs: - gitHubConnection: 'PAT' - repositoryName: 'Ombi-app/Ombi.Releases' - action: 'create' - target: 'c7fcbb77b58aef1076d635a9ef99e4374abc8672' - tagSource: 'userSpecifiedTag' - tag: '$(gitTag)' - releaseNotesSource: 'inline' - releaseNotesInline: '$(ReleaseNotes)' - assets: | - $(System.ArtifactsDirectory)/**/*.zip - $(System.ArtifactsDirectory)/**/*.tar.gz - isPreRelease: true - changeLogCompareToRelease: 'lastNonDraftRelease' - changeLogType: 'commitBased' +# - task: GitHubRelease@1 +# displayName: 'Ombi.Releases Release' +# inputs: +# gitHubConnection: 'PAT' +# repositoryName: 'Ombi-app/Ombi.Releases' +# action: 'create' +# target: 'c7fcbb77b58aef1076d635a9ef99e4374abc8672' +# tagSource: 'userSpecifiedTag' +# tag: '$(gitTag)' +# releaseNotesSource: 'inline' +# releaseNotesInline: '$(ReleaseNotes)' +# assets: | +# $(System.ArtifactsDirectory)/**/*.zip +# $(System.ArtifactsDirectory)/**/*.tar.gz +# isPreRelease: true +# changeLogCompareToRelease: 'lastNonDraftRelease' +# changeLogType: 'commitBased' - - task: GitHubRelease@1 - displayName: 'Ombi Release' - inputs: - gitHubConnection: 'PAT' - repositoryName: 'Ombi-app/Ombi' - action: 'create' - target: '$(Build.SourceVersion)' - tagSource: 'userSpecifiedTag' - tag: '$(gitTag)' - releaseNotesSource: 'inline' - releaseNotesInline: '$(ReleaseNotes)' - assets: | - $(System.ArtifactsDirectory)/**/*.zip - $(System.ArtifactsDirectory)/**/*.tar.gz - isPreRelease: true - changeLogCompareToRelease: 'lastNonDraftRelease' - changeLogType: 'commitBased' +# - task: GitHubRelease@1 +# displayName: 'Ombi Release' +# inputs: +# gitHubConnection: 'PAT' +# repositoryName: 'Ombi-app/Ombi' +# action: 'create' +# target: '$(Build.SourceVersion)' +# tagSource: 'userSpecifiedTag' +# tag: '$(gitTag)' +# releaseNotesSource: 'inline' +# releaseNotesInline: '$(ReleaseNotes)' +# assets: | +# $(System.ArtifactsDirectory)/**/*.zip +# $(System.ArtifactsDirectory)/**/*.tar.gz +# isPreRelease: true +# changeLogCompareToRelease: 'lastNonDraftRelease' +# changeLogType: 'commitBased' - - task: PowerShell@2 - displayName: "Trigger APT build" - inputs: - targetType: 'inline' - script: | - $body = @{ - "ref"="main" - "inputs"= @{"version"= "$(gitTag)"} - } | ConvertTo-Json +# - task: PowerShell@2 +# displayName: "Trigger APT build" +# inputs: +# targetType: 'inline' +# script: | +# $body = @{ +# "ref"="main" +# "inputs"= @{"version"= "$(gitTag)"} +# } | ConvertTo-Json - $header = @{ - "Accept"="application/vnd.github.v3+json" - "Authorization"="Bearer $(APTPAT)" - "User-Agent"="Ombi" - } +# $header = @{ +# "Accept"="application/vnd.github.v3+json" +# "Authorization"="Bearer $(APTPAT)" +# "User-Agent"="Ombi" +# } - Invoke-RestMethod -Uri "https://api.github.com/repos/Ombi-app/Ombi.Apt/actions/workflows/build-deb.yml/dispatches" -Method 'Post' -Body $body -Headers $header \ No newline at end of file +# Invoke-RestMethod -Uri "https://api.github.com/repos/Ombi-app/Ombi.Apt/actions/workflows/build-deb.yml/dispatches" -Method 'Post' -Body $body -Headers $header \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..09c66c1dd --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,220 @@ +name: CI Build + +on: + push: + branches: [ develop, master ] + +jobs: + build-ui: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: NodeModules Cache + uses: actions/cache@v2 + with: + path: '**/node_modules' + key: node_modules-${{ hashFiles('**/yarn.lock') }} + + - name: UI Install + run: yarn --cwd ./src/Ombi/ClientApp install + + - name: Build UI + run: yarn --cwd ./src/Ombi/ClientApp run build + + - name: Publish UI Artifacts + uses: actions/upload-artifact@v2 + with: + name: angular_dist + path: | + ./src/Ombi/ClientApp/dist + + unit-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '5.0.x' + + - name: Nuget Cache + uses: actions/cache@v2 + with: + path: ~/.nuget/packages + key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} + restore-keys: | + ${{ runner.os }}-nuget + + - name: Run Unit Tests + run: | + cd src + dotnet test --logger trx --results-directory "TestResults" + + versioning: + runs-on: ubuntu-latest + outputs: + changelog: ${{ steps.changelog.outputs.clean_changelog }} + tag: ${{ steps.changelog.outputs.tag }} + version: ${{ steps.changelog.outputs.version }} + steps: + - uses: actions/checkout@v2 + # This is only to get the next version number so we can set the version before compile + - name: Conventional Changelog Action + id: changelog + uses: TriPSs/conventional-changelog-action@v3 + with: + skip-version-file: 'true' + skip-commit: 'true' + version-file: 'version.json' + output-file: 'false' + skip-on-empty: 'false' + git-push: 'false' + + - name: Output version + run: | + echo "outputs: ${{ steps.changelog.outputs.tag }}" + echo "Version: ${{ steps.changelog.outputs.version }}" + echo "log: ${{ steps.changelog.outputs.clean_changelog }}" + + publish: + runs-on: ubuntu-latest + needs: [ build-ui, versioning ] + strategy: + matrix: + include: + - os: win10-x64 + format: zip + compression: zip + - os: win10-x86 + format: zip + compression: zip + - os: linux-x64 + format: tar.gz + compression: tar + - os: linux-arm + format: tar.gz + compression: tar + - os: linux-arm64 + compression: tar + format: tar.gz + - os: osx-x64 + compression: tar + format: tar.gz + steps: + - uses: actions/checkout@v2 + + - name: Nuget Cache + uses: actions/cache@v2 + with: + path: ~/.nuget/packages + key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} + restore-keys: | + ${{ runner.os }}-nuget + + - name: Set Backend Version + run: | + dotnet tool install -g dotnet-setversion + setversion -r ${{ needs.versioning.outputs.version }} + working-directory: src + + - name: Publish Backend ${{ matrix.os }} + run: dotnet publish -c Release -r ${{ matrix.os }} -o "${{ matrix.os }}" --self-contained true -p:PublishSingleFile=true + working-directory: src/Ombi + + - name: Download Angular + uses: actions/download-artifact@v2 + with: + name: angular_dist + path: ~/src/Ombi/dist + + - name: Copy Dist to Artifacts + run: | + cd ${{ matrix.os }} + sudo mkdir -p ClientApp/dist + echo "mkdir /ClientApp" + echo "list os (ClientApp should be here)" + ls + cd .. + echo "Copy dist to /ClientApp" + sudo mv ~/src/Ombi/dist/* ${{ matrix.os }}/ClientApp/dist + working-directory: src/Ombi + + - name: Archive Release + uses: thedoctor0/zip-release@master + with: + type: '${{ matrix.compression }}' + filename: '../${{ matrix.os }}.${{ matrix.format }}' + path: '.' + directory: 'src/Ombi/${{ matrix.os }}' + + - name: Publish Release + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.os }} + path: | + ./src/Ombi/${{ matrix.os }}.${{ matrix.format }} + + release: + needs: [ publish, unit-test, versioning ] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Download Artifacts + id: download + uses: actions/download-artifact@v2 + with: + path: artifacts + + - name: Publish to GitHub Master + uses: softprops/action-gh-release@v1 + if: contains(github.ref, 'master') + with: + body: ${{ needs.versioning.outputs.changelog }} + name: ${{ needs.versioning.outputs.tag }} + tag_name: ${{ needs.versioning.outputs.tag }} + files: | + artifacts/**/*.tar.gz + artifacts/**/*.zip + + - name: Publish to GitHub Develop + uses: softprops/action-gh-release@v1 + if: contains(github.ref, 'develop') + with: + prerelease: true + body: ${{ needs.versioning.outputs.changelog }} + name: ${{ needs.versioning.outputs.tag }} + tag_name: ${{ needs.versioning.outputs.tag }} + files: | + artifacts/**/*.tar.gz + artifacts/**/*.zip + + update-changelog: + needs: [ release ] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Conventional Changelog Action + id: changelog + uses: TriPSs/conventional-changelog-action@v3 + with: + version-file: 'version.json' + skip-on-empty: 'false' + git-message: 'chore(release): :rocket: {version}' + + update-apt: + needs: [ release ] + runs-on: ubuntu-latest + steps: + - name: Trigger APT Build + uses: fjogeleit/http-request-action@master + with: + url: 'https://api.github.com/repos/Ombi-app/Ombi.Apt/actions/workflows/build-deb.yml/dispatches' + method: 'POST' + contentType: 'application/json' + data: "{ 'ref':'main', 'inputs': { 'version': '${{ steps.changelog.outputs.tag }}'} }" + customHeaders: "{'Accept':'application/vnd.github.v3+json', 'Authorization':'Bearer ${{secrets.APT_PAT}}', 'User-Agent':'Ombi'}" + + diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 613ccc14f..8c870059c 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -17,8 +17,6 @@ on: pull_request: # The branches below must be a subset of the branches above branches: [ develop ] - schedule: - - cron: '40 3 * * 4' jobs: analyze: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 000000000..e353dce4d --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,106 @@ +name: PR Build + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + build-ui: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: NodeModules Cache + uses: actions/cache@v2 + with: + path: '**/node_modules' + key: node_modules-${{ hashFiles('**/yarn.lock') }} + + - name: UI Install + run: yarn --cwd ./src/Ombi/ClientApp install + + - name: Build UI + run: yarn --cwd ./src/Ombi/ClientApp run build + + unit-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '5.0.x' + + - name: Nuget Cache + uses: actions/cache@v2 + with: + path: ~/.nuget/packages + key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} + restore-keys: | + ${{ runner.os }}-nuget + + - name: Run Unit Tests + run: | + cd src + dotnet test --logger trx --results-directory "TestResults" + + analysis: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + # Disabling shallow clone is recommended for improving relevancy of reporting + fetch-depth: 0 + - name: SonarCloud Scan + uses: sonarsource/sonarcloud-github-action@master + with: + args: > + -Dsonar.organization=ombi-app + -Dsonar.projectKey=Ombi-app_Ombi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + + publish: + runs-on: ubuntu-latest + needs: [ unit-test ] + strategy: + matrix: + include: + - os: win10-x64 + format: zip + compression: zip + - os: win10-x86 + format: zip + compression: zip + - os: linux-x64 + format: tar.gz + compression: tar + - os: linux-arm + format: tar.gz + compression: tar + - os: linux-arm64 + compression: tar + format: tar.gz + - os: osx-x64 + compression: tar + format: tar.gz + steps: + - uses: actions/checkout@v2 + + - name: Nuget Cache + uses: actions/cache@v2 + with: + path: ~/.nuget/packages + key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} + restore-keys: | + ${{ runner.os }}-nuget + + - name: Publish Backend ${{ matrix.os }} + run: dotnet publish -c Release -r ${{ matrix.os }} -o "${{ matrix.os }}" --self-contained true -p:PublishSingleFile=true + working-directory: src/Ombi + + + diff --git a/version.json b/version.json new file mode 100644 index 000000000..e0fcdb6c3 --- /dev/null +++ b/version.json @@ -0,0 +1,3 @@ +{ + "version": "4.0.1509" +} \ No newline at end of file