diff --git a/.github/scripts/GenerateVersionNumber-2.0.0.ps1 b/.github/scripts/GenerateVersionNumber-2.0.0.ps1 new file mode 100644 index 00000000..66c5fe8f --- /dev/null +++ b/.github/scripts/GenerateVersionNumber-2.0.0.ps1 @@ -0,0 +1,24 @@ +$latestVersion = [version]"2.0.0" + +$newVersion = [version]$latestVersion +$phase = "" +$newVersionString = "" + +switch -regex ($Env:GITHUB_REF) { + '^refs\/pull\/*.' { + $splitRef = $Env:GITHUB_REF -split "/" + $phase = "pr$($splitRef[2])" + $newVersionString = "{0}-{3}-{4}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER + } + '^refs\/heads\/feature-2.0.0\/*.' { + $phase = 'alpha' + $newVersionString = "{0}-{3}-{4}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER + } + '^refs\/heads\/development-2.0.0' { + $phase = 'beta' + $newVersionString = "{0}-{3}-{4}" -f $newVersion, $phase, $Env:GITHUB_RUN_NUMBER + } +} + + +Write-Output $newVersionString diff --git a/.github/workflows/Build Essentials.yml b/.github/workflows/Build Essentials.yml new file mode 100644 index 00000000..f160fa9e --- /dev/null +++ b/.github/workflows/Build Essentials.yml @@ -0,0 +1,307 @@ +name: Branch Build Using Docker + +on: + push: + branches: + - feature-2.0.0/* + pull_request: + types: + - closed + branches: + - development + +env: + # solution path doesn't need slashes unless there it is multiple folders deep + # solution name does not include extension. .sln is assumed + SOLUTION_PATH: PepperDashEssentials + SOLUTION_FILE: PepperDashEssentials + # Do not edit this, we're just creating it here + VERSION: 0.0.0-buildtype-buildnumber + # Defaults to debug for build type + BUILD_TYPE: Debug + # Defaults to main as the release branch. Change as necessary + RELEASE_BRANCH: main +jobs: + Build_Project: + runs-on: windows-latest + steps: + # First we checkout the source repo + - name: Checkout repo + uses: actions/checkout@v2 + with: + fetch-depth: 0 + # Fetch all tags + - name: Fetch tags + run: git fetch --tags + # Generate the appropriate version number + - name: Set Version Number + shell: powershell + run: | + $version = ./.github/scripts/GenerateVersionNumber-2.0.0.ps1 + echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + # Use the version number to set the version of the assemblies + - name: Update AssemblyInfo.cs + shell: powershell + run: | + ./.github/scripts/UpdateAssemblyVersion.ps1 ${{ env.VERSION }} + - name: restore Nuget Packages + run: nuget install .\packages.config -OutputDirectory .\packages -ExcludeVersion + # Login to Docker + - name: Login to Docker + uses: azure/docker-login@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_TOKEN }} + # Build the solutions in the docker image + - name: Build Solution + shell: powershell + run: | + Invoke-Expression "docker run --rm --mount type=bind,source=""$($Env:GITHUB_WORKSPACE)"",target=""c:/project"" pepperdash/sspbuilder c:\cihelpers\vsidebuild.exe -Solution ""c:\project\$($Env:SOLUTION_FILE).sln"" -BuildSolutionConfiguration $($ENV:BUILD_TYPE)" + # Zip up the output files as needed + - name: Zip Build Output + shell: powershell + run: ./.github/scripts/ZipBuildOutput.ps1 + # Write the version to a file to be consumed by the push jobs + - name: Write Version + run: Write-Output "$($Env:VERSION)" | Out-File -FilePath "$($Env:GITHUB_HOME)\output\version.txt" + # Upload the build output as an artifact + - name: Upload Build Output + uses: actions/upload-artifact@v1 + with: + name: Build + path: ./${{ env.SOLUTION_FILE}}-${{ env.VERSION}}.zip + # Upload the Version file as an artifact + - name: Upload version.txt + uses: actions/upload-artifact@v1 + with: + name: Version + path: ${{env.GITHUB_HOME}}\output\version.txt + # Create the release on the source repo + - name: Create tag for non-rc builds + if: contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta') + run: | + git tag $($Env:VERSION) + git push --tags origin + - name: Create Release + id: create_release + # using contributor's version to allow for pointing at the right commit + if: contains(env.VERSION,'-rc-') || contains(env.VERSION,'-hotfix-') + uses: fleskesvor/create-release@feature/support-target-commitish + with: + tag_name: ${{ env.VERSION }} + release_name: ${{ env.VERSION }} + prerelease: ${{contains('debug', env.BUILD_TYPE)}} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Upload the build package to the release + - name: Upload Release Package + if: contains(env.VERSION,'-rc-') || contains(env.VERSION,'-hotfix-') + id: upload_release + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./${{ env.SOLUTION_FILE}}-${{ env.VERSION}}.zip + asset_name: ${{ env.SOLUTION_FILE}}-${{ env.VERSION}}.zip + asset_content_type: application/zip + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + Push_Nuget_Package: + needs: Build_Project + runs-on: windows-latest + steps: + - name: Download Build Version Info + uses: actions/download-artifact@v1 + with: + name: Version + - name: Set Version Number + shell: powershell + run: | + Get-ChildItem "./Version" + $version = Get-Content -Path ./Version/version.txt + Write-Host "Version: $version" + echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + Remove-Item -Path ./Version/version.txt + Remove-Item -Path ./Version + - name: Download Build output + uses: actions/download-artifact@v1 + with: + name: Build + path: ./ + - name: Unzip Build file + run: | + Get-ChildItem .\*.zip | Expand-Archive -DestinationPath .\ + Remove-Item -Path .\*.zip + - name: Copy Files to root & delete output directory + run: | + Remove-Item -Path .\* -Include @("*.cpz","*.md","*.cplz","*.json","*.dll","*.clz") + Get-ChildItem -Path .\output\* | Copy-Item -Destination .\ + Remove-Item -Path .\output -Recurse + - name: Add nuget.exe + uses: nuget/setup-nuget@v1 + - name: Add Github Packages source + run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} + - name: Add nuget.org API Key + run: nuget setApiKey ${{ secrets.NUGET_API_KEY }} + - name: Create nuget package + run: nuget pack "./PepperDash_Essentials_Core.nuspec" -version ${{ env.VERSION }} + - name: Publish nuget package to Github registry + run: nuget push **/*.nupkg -source github + - name: Publish nuget package to nuget.org + run: nuget push **/*.nupkg -Source https://api.nuget.org/v3/index.json + # This step always runs and pushes the build to the internal build rep + # Internal_Push_Output: + # needs: Build_Project + # runs-on: windows-latest + # steps: + # - name: check Github ref + # run: ${{toJson(github.ref)}} + # # Checkout the repo + # - name: Checkout Builds Repo + # uses: actions/checkout@v2 + # with: + # token: ${{ secrets.BUILDS_TOKEN }} + # repository: PepperDash-Engineering/essentials-builds + # ref: ${{ Env.GITHUB_REF }} + # # Download the version artifact from the build job + # - name: Download Build Version Info + # uses: actions/download-artifact@v1 + # with: + # name: Version + # - name: Check Directory + # run: Get-ChildItem "./" + # # Set the version number environment variable from the file we just downloaded + # - name: Set Version Number + # shell: powershell + # run: | + # Get-ChildItem "./Version" + # $version = Get-Content -Path ./Version/version.txt + # Write-Host "Version: $version" + # echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + # Remove-Item -Path ./Version/version.txt + # Remove-Item -Path ./Version + # # Checkout/Create the branch + # - name: Create new branch + # run: git checkout -b $($Env:GITHUB_REF -replace "refs/heads/") + # # Download the build output into the repo + # - name: Download Build output + # uses: actions/download-artifact@v1 + # with: + # name: Build + # path: ./ + # - name: Check directory + # run: Get-ChildItem ./ + # # Unzip the build package file + # - name: Unzip Build file + # run: | + # Get-ChildItem .\*.zip | Expand-Archive -DestinationPath .\ + # Remove-Item -Path .\*.zip + # - name: Check directory again + # run: Get-ChildItem ./ + # # Copy Contents of output folder to root directory + # - name: Copy Files to root & delete output directory + # run: | + # Remove-Item -Path .\* -Include @("*.cpz","*.md","*.cplz","*.json","*.dll","*.clz") + # Get-ChildItem -Path .\output\* | Copy-Item -Destination .\ + # Remove-Item -Path .\output -Recurse + # # Commits the build output to the branch and tags it with the version + # - name: Commit build output and tag the commit + # shell: powershell + # run: | + # git config user.email "actions@pepperdash.com" + # git config user.name "GitHub Actions" + # git add . + # $commit = "Build $($Env:GITHUB_RUN_NUMBER) from commit: https://github.com/$($Env:GITHUB_REPOSITORY)/commit/$($Env:GITHUB_SHA)" + # Write-Host "Commit: $commit" + # git commit -m $commit + # git tag $($Env:VERSION) + # # Push the commit + # - name: Push to Builds Repo + # shell: powershell + # run: | + # $branch = $($Env:GITHUB_REF) -replace "refs/heads/" + # Write-Host "Branch: $branch" + # git push -u origin $($branch) --force + # # Push the tags + # - name: Push tags + # run: git push --tags origin + # - name: Check Directory + # run: Get-ChildItem ./ + # # This step only runs if the branch is main or release/ runs and pushes the build to the public build repo + # Public_Push_Output: + # needs: Build_Project + # runs-on: windows-latest + # if: contains(github.ref, 'main') || contains(github.ref, '/release/') + # steps: + # # Checkout the repo + # - name: check Github ref + # run: ${{toJson(github.ref)}} + # - name: Checkout Builds Repo + # uses: actions/checkout@v2 + # with: + # token: ${{ secrets.BUILDS_TOKEN }} + # repository: PepperDash/Essentials-Builds + # ref: ${{ Env.GITHUB_REF }} + # # Download the version artifact from the build job + # - name: Download Build Version Info + # uses: actions/download-artifact@v1 + # with: + # name: Version + # - name: Check Directory + # run: Get-ChildItem "./" + # # Set the version number environment variable from the file we just downloaded + # - name: Set Version Number + # shell: powershell + # run: | + # Get-ChildItem "./Version" + # $version = Get-Content -Path ./Version/version.txt + # Write-Host "Version: $version" + # echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + # Remove-Item -Path ./Version/version.txt + # Remove-Item -Path ./Version + # # Checkout/Create the branch + # - name: Create new branch + # run: git checkout -b $($Env:GITHUB_REF -replace "refs/heads/") + # # Download the build output into the repo + # - name: Download Build output + # uses: actions/download-artifact@v1 + # with: + # name: Build + # path: ./ + # - name: Check directory + # run: Get-ChildItem ./ + # # Unzip the build package file + # - name: Unzip Build file + # run: | + # Get-ChildItem .\*.zip | Expand-Archive -DestinationPath .\ + # Remove-Item -Path .\*.zip + # - name: Check directory again + # run: Get-ChildItem ./ + # # Copy Contents of output folder to root directory + # - name: Copy Files to root & delete output directory + # run: | + # Remove-Item -Path .\* -Include @("*.cpz","*.md","*.cplz","*.json","*.dll","*.clz") + # Get-ChildItem -Path .\output\* | Copy-Item -Destination .\ + # Remove-Item -Path .\output -Recurse + # # Commits the build output to the branch and tags it with the version + # - name: Commit build output and tag the commit + # shell: powershell + # run: | + # git config user.email "actions@pepperdash.com" + # git config user.name "GitHub Actions" + # git add . + # $commit = "Build $($Env:GITHUB_RUN_NUMBER) from commit: https://github.com/$($Env:GITHUB_REPOSITORY)/commit/$($Env:GITHUB_SHA)" + # Write-Host "Commit: $commit" + # git commit -m $commit + # git tag $($Env:VERSION) + # # Push the commit + # - name: Push to Builds Repo + # shell: powershell + # run: | + # $branch = $($Env:GITHUB_REF) -replace "refs/heads/" + # Write-Host "Branch: $branch" + # git push -u origin $($branch) --force + # # Push the tags + # - name: Push tags + # run: git push --tags origin + # - name: Check Directory + # run: Get-ChildItem ./