diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml deleted file mode 100644 index 04a0a4bb..00000000 --- a/.github/workflows/build_and_test.yml +++ /dev/null @@ -1,240 +0,0 @@ -name: Build and Test - -on: - pull_request: - branches: - - master - push: - branches: - - master - -jobs: - build_module: - name: Build Module - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: pwsh - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Build - shell: pwsh - run: | - Invoke-Build -Task Clean, Build - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: Release - path: ./Release/ - - test_on_windows_v5: - name: Test Module on Windows (PS v5) - needs: build_module - runs-on: windows-latest - steps: - - uses: actions/checkout@v3 - - name: Download - uses: actions/download-artifact@v3 - with: - name: Release - path: ./Release/ - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: powershell - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Test - shell: powershell - run: | - Invoke-Build -Task Test - - name: Upload test results - uses: actions/upload-artifact@v3 - with: - name: ${{ runner.os }}-Unit-Tests - path: Test*.xml - if: ${{ always() }} - - test_on_windows_v7: - name: Test Module on Windows (PS v7) - needs: build_module - runs-on: windows-latest - steps: - - uses: actions/checkout@v3 - - name: Download - uses: actions/download-artifact@v3 - with: - name: Release - path: ./Release/ - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: pwsh - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Test - shell: pwsh - run: | - Invoke-Build -Task Test - - name: Upload test results - uses: actions/upload-artifact@v3 - with: - name: ${{ runner.os }}-Unit-Tests - path: Test*.xml - if: ${{ always() }} - - test_on_ubuntu: - name: Test Module on Ubuntu - needs: build_module - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Download - uses: actions/download-artifact@v3 - with: - name: Release - path: ./Release/ - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: pwsh - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Test - shell: pwsh - run: | - Invoke-Build -Task Test - - name: Upload test results - uses: actions/upload-artifact@v3 - with: - name: ${{ runner.os }}-Unit-Tests - path: Test*.xml - if: ${{ always() }} - - test_on_macos: - name: Test Module on macOS - needs: build_module - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - name: Download - uses: actions/download-artifact@v3 - with: - name: Release - path: ./Release/ - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: pwsh - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Test - shell: pwsh - run: | - Invoke-Build -Task Test - - name: Upload test results - uses: actions/upload-artifact@v3 - with: - name: ${{ runner.os }}-Unit-Tests - path: Test*.xml - if: ${{ always() }} - - test_against_cloud: - env: - JiraURI: ${{ secrets.JiraURI }} - JiraUser: ${{ secrets.JiraUser }} - JiraPass: ${{ secrets.JiraPass }} - name: Test Module against Cloud Server - needs: build_module - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Download - uses: actions/download-artifact@v3 - with: - name: Release - path: ./Release/ - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: pwsh - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Test - shell: pwsh - run: | - Invoke-Build -Task Test -Tag "Integration" -ExcludeTag "" - if: ${{ env.JiraURI != '' }} - - name: Upload test results - uses: actions/upload-artifact@v3 - with: - name: ${{ runner.os }}-Unit-Tests - path: Test*.xml - if: ${{ always() }} - - package: - name: Package - needs: [build_module, test_on_windows_v5, test_on_windows_v7, test_on_ubuntu, test_on_macos, test_against_cloud] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Download - uses: actions/download-artifact@v3 - with: - name: Release - path: ./Release/ - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: pwsh - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Package - shell: pwsh - run: | - Invoke-Build -Task Package - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: JiraPS.zip - path: ./Release/JiraPS.zip - if: ${{ success() }} - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..c6cad18a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,90 @@ +name: CI + +on: [pull_request] + +defaults: + run: + shell: pwsh + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/cache@v3 + id: cacher + with: + path: "~/.local/share/powershell/Modules" + key: ${{ runner.os }}-PSModules + + - name: Setup + run: | + ./Tools/setup.ps1 + Invoke-Build -Task ShowInfo + + - name: Build + run: | + Invoke-Build -Task Clean, Build + + - uses: actions/upload-artifact@v4 + with: + name: Release + path: ./Release/ + + test: + needs: build + + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + shell: [pwsh] + include: + - os: windows-latest + shell: powershell + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 + with: + name: Release + path: ./Release/ + + - uses: actions/cache@v3 + id: cacher + with: + path: "~/.local/share/powershell/Modules" + key: ${{ runner.os }}-PSModules + + - name: Setup + run: ${{ matrix.shell }} -c ". ./Tools/setup.ps1; Invoke-Build -Task ShowInfo" + + - name: Test + run: ${{ matrix.shell }} -c "Invoke-Build -Task Test" + + - uses: actions/upload-artifact@v4 + with: + name: ${{ runner.os }}-${{ matrix.shell }}-Unit-Tests + path: Test*.xml + if-no-files-found: error + if: ${{ always() }} + + # test_against_cloud: + # env: + # JiraURI: ${{ secrets.JiraURI }} + # JiraUser: ${{ secrets.JiraUser }} + # JiraPass: ${{ secrets.JiraPass }} + # name: Test Module against Cloud Server + # needs: build + # runs-on: ubuntu-latest + # steps: + # ... + # - name: Test + # run: | + # Invoke-Build -Task Test -Tag "Integration" -ExcludeTag "" + # if: ${{ env.JiraURI != '' }} + # ... diff --git a/.github/workflows/package_deploy.yml b/.github/workflows/package_deploy.yml deleted file mode 100644 index 32e53735..00000000 --- a/.github/workflows/package_deploy.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Package and Deploy - -on: - push: - branches: - - feature/package-artifact - workflow_dispatch: - - -jobs: - build_package_deploy: - name: Deploy Module - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Setup PowerShell module cache - id: cacher - uses: actions/cache@v3 - with: - path: "~/.local/share/powershell/Modules" - key: ${{ runner.os }}-PSModules - - name: Setup - shell: pwsh - run: | - ./Tools/setup.ps1 - Invoke-Build -Task ShowInfo - - name: Build - shell: pwsh - run: | - Invoke-Build -Task Clean, Build - - name: Package - shell: pwsh - run: | - Invoke-Build -Task Package - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: JiraPS.zip - path: ./Release/JiraPS.zip - - name: Deploy - shell: pwsh - run: | - # Invoke-Build -Task Deploy - Write-Warning "SKIPPING: Invoke-Build -Task Deploy" - if: ${{ success() }} - diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..ddf82465 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,42 @@ +name: Release + +on: + push: + branches: + - feature/package-artifact # TODO: what should be a trigger? + workflow_dispatch: + +defaults: + run: + shell: pwsh + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 # TODO: this file is not available, as it's an artefact from another pipeline + with: + name: Release + path: ./Release/ + + - uses: actions/cache@v3 + id: cacher + with: + path: "~/.local/share/powershell/Modules" + key: ${{ runner.os }}-PSModules + + - name: Setup + run: | + ./Tools/setup.ps1 + Invoke-Build -Task ShowInfo + + - name: Deploy + env: + NUGET_API_KEY: ${{ secrets.shhh }} # TODO: this is not the correct secret yet. + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Invoke-Build -Task Deploy + Write-Warning "SKIPPING: Invoke-Build -Task Deploy" diff --git a/JiraPS.build.ps1 b/JiraPS.build.ps1 index 7d125374..c4cc35c8 100644 --- a/JiraPS.build.ps1 +++ b/JiraPS.build.ps1 @@ -5,9 +5,7 @@ [System.Diagnostics.CodeAnalysis.SuppressMessage('PSAvoidUsingEmptyCatchBlock', '')] param( [String[]]$Tag, - [String[]]$ExcludeTag = @("Integration"), - [String]$PSGalleryAPIKey, - [String]$GithubAccessToken + [String[]]$ExcludeTag = @("Integration") ) $WarningPreference = "Continue" @@ -168,7 +166,7 @@ task CompileModule Init, { Set-Content -LiteralPath $targetFile -Value $compiled -Encoding UTF8 -Force Remove-Utf8Bom -Path $targetFile - "Private", "Public" | Foreach-Object { Remove-Item -Path "$env:BHBuildOutput/$env:BHProjectName/$_" -Recurse -Force } + "Private", "Public" | ForEach-Object { Remove-Item -Path "$env:BHBuildOutput/$env:BHProjectName/$_" -Recurse -Force } } # Synopsis: Use PlatyPS to generate External-Help @@ -196,22 +194,13 @@ task UpdateManifest GetNextVersion, { } $Prerelease = '' - if ("$env:BHBranchName" -notin @('master','main')) { + if ("$env:BHBranchName" -notin @('master', 'main')) { $Prerelease = "$env:BHBranchName".ToLower() -replace '[^a-zA-Z0-9]' } BuildHelpers\Update-Metadata -Path "$env:BHBuildOutput/$env:BHProjectName/$env:BHProjectName.psd1" -PropertyName Prerelease -Value $Prerelease } -# Synopsis: Create a ZIP file with this build -task Package Init, { - Assert-True { Test-Path "$env:BHBuildOutput\$env:BHProjectName" } "Missing files to package" - - Remove-Item "$env:BHBuildOutput\$env:BHProjectName.zip" -ErrorAction SilentlyContinue - $null = Compress-Archive -Path "$env:BHBuildOutput\$env:BHProjectName" -DestinationPath "$env:BHBuildOutput\$env:BHProjectName.zip" -} -#endregion BuildRelease - #region Test task Test Init, { Assert-True { Test-Path $env:BHBuildOutput -PathType Container } "Release path must exist" @@ -253,6 +242,7 @@ task Deploy Init, PublishToGallery, TagReplository, UpdateHomepage # Synpsis: Publish the $release to the PSGallery task PublishToGallery { + $PSGalleryAPIKey = $env:NUGET_API_KEY Assert-True (-not [String]::IsNullOrEmpty($PSGalleryAPIKey)) "No key for the PSGallery" Assert-True { Get-Module $env:BHProjectName -ListAvailable } "Module $env:BHProjectName is not available" @@ -263,6 +253,8 @@ task PublishToGallery { # Synopsis: push a tag with the version to the git repository task TagReplository GetNextVersion, Package, { + $GithubAccessToken = $env:GITHUB_TOKEN + Assert-True (-not [String]::IsNullOrEmpty($GithubAccessToken)) "No key for the PSGallery" $releaseText = "Release version $env:NextBuildVersion" Set-GitUser @@ -284,7 +276,7 @@ task TagReplository GetNextVersion, Package, { Name = "Version $env:NextBuildVersion" ReleaseText = $releaseText RepositoryOwner = "AtlassianPS" - Artifact = "$env:BHBuildOutput\$env:BHProjectName.zip" + Artifact = "$env:BHBuildOutput\$env:BHProjectName.zip" # TODO: probably not the right file } Publish-GithubRelease @release }