diff --git a/.github/workflows/build_be.yml b/.github/workflows/build.yml similarity index 60% rename from .github/workflows/build_be.yml rename to .github/workflows/build.yml index eeed908..6f607cc 100644 --- a/.github/workflows/build_be.yml +++ b/.github/workflows/build.yml @@ -1,15 +1,12 @@ -name: Build Bleeding Edge +name: Build -on: - push: - branches: - - master +on: push jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2.3.5 + - uses: actions/checkout@v3 with: fetch-depth: 0 # Need to fetch all for proper history - name: Collect build info @@ -17,12 +14,22 @@ jobs: uses: actions/github-script@v6 with: script: | - core.setOutput("is_be", context.repo.owner == "BepInEx"); - core.setOutput("sha_short", await exec.exec("git", ["rev-parse", "--short", "HEAD"])); - core.setOutput("build_id", context.run.runNumber + 500); // builds.bepinex.dev build numbers start at 500 + let buildType = "Development"; + if (context.ref == "refs/heads/master" && context.repo.owner == "BepInEx") { + buildType = "BleedingEdge"; + } + core.setOutput("build_type", buildType); + let shortHash = ""; + await exec.exec("git", ["rev-parse", "--short", "HEAD"], { + listeners: { + stdout: d => shortHash += d.toString().trim(), + } + }); + core.setOutput("sha_short", shortHash); + core.setOutput("build_id", context.runNumber + 600); // builds.bepinex.dev build numbers start at 500 - uses: nrwl/last-successful-commit-action@v1 id: last_successful_commit - if: ${{ steps.info.outputs.is_be == 'true' && env.GITHUB_TOKEN != null }} + if: ${{ steps.info.outputs.build_type == 'BleedingEdge' && env.GITHUB_TOKEN != null }} with: branch: master workflow_id: build_be.yml @@ -32,15 +39,17 @@ jobs: dotnet-version: "6.0.x" - name: Build run: | - ./build.sh --target Publish --bleeding-edge ${{ steps.info.outputs.is_be }} --build-id ${{ steps.info.outputs.build_id }} --last-build-commit \"${{ steps.last_successful_commit.outputs.commit_hash }}\" --nuget-api-key \"${{ secrets.BEPIN_DEV_NUGET_KEY }}\" + ./build.sh --target Publish --build-type ${{ steps.info.outputs.build_type }} --build-id ${{ steps.info.outputs.build_id }} --last-build-commit \"${{ steps.last_successful_commit.outputs.commit_hash }}\" --nuget-api-key \"${{ secrets.BEPIN_DEV_NUGET_KEY }}\" - name: Upload to BepinBuilds - if: ${{ steps.info.outputs.is_be == 'true' && secrets.BEPISBUILDS_HOST != null }} + env: + BEPISBUILDS_HOST: ${{ secrets.BEPISBUILDS_HOST }} + if: ${{ steps.info.outputs.build_type == 'BleedingEdge' && env.BEPISBUILDS_HOST != null }} run: | artifacts_list=$(ls ./bin/dist/*.* | tr '\n' ','); artifacts_list=${artifacts_list::-1}; curl --upload-file "{${artifacts_list}}" --ftp-pasv --ftp-skip-pasv-ip --ftp-create-dirs --ftp-method singlecwd --disable-epsv "ftp://${{ secrets.BEPISBUILDS_AUTH }}@${{ secrets.BEPISBUILDS_HOST }}:${{ secrets.BEPISBUILDS_PORT }}/bepinex_be/artifacts/${{ steps.info.outputs.build_id }}/" - name: Generate changelog id: generate_changelog - if: ${{ steps.info.outputs.is_be == 'true' }} + if: ${{ steps.info.outputs.build_type == 'BleedingEdge' }} run: | changelog=$(git --no-pager log --no-merges --pretty="format:- (\`%h\`) [%an] %s" ${{ steps.last_successful_commit.outputs.commit_hash }}..HEAD | sed ':a;N;$!ba;s/"/\"/g' | sed ':a;N;$!ba;s/\n/\\n/g') echo "::set-output name=changelog::$changelog" @@ -48,7 +57,7 @@ jobs: uses: joelwmale/webhook-action@2.1.0 env: BEPINEX_DISCORD_WEBHOOK: ${{ secrets.BEPINEX_DISCORD_WEBHOOK }} - if: ${{ steps.info.outputs.is_be == 'true' && env.BEPINEX_DISCORD_WEBHOOK != null }} + if: ${{ steps.info.outputs.build_type == 'BleedingEdge' && env.BEPINEX_DISCORD_WEBHOOK != null }} with: url: ${{ secrets.BEPINEX_DISCORD_WEBHOOK }} body: | @@ -66,5 +75,5 @@ jobs: uses: actions/upload-artifact@v2.2.4 with: path: "./bin/dist/*.zip" - name: "BepInEx_CI_${{ steps.info.outputs.sha_short }}_${{ steps.info.outputs.build_id || 0 }}" + name: "BepInEx_CI_${{ steps.info.outputs.build_type }}_${{ steps.info.outputs.sha_short }}_${{ steps.info.outputs.build_id || 0 }}" diff --git a/Directory.Build.props b/Directory.Build.props index 0d2eda9..70bf814 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -21,6 +21,6 @@ true - + diff --git a/build/Program.cs b/build/Program.cs index 8fa95fa..39d4e47 100644 --- a/build/Program.cs +++ b/build/Program.cs @@ -25,6 +25,13 @@ return new CakeHost() public class BuildContext : FrostingContext { + public enum ProjectBuildType + { + Release, + Development, + BleedingEdge + } + public const string DoorstopVersion = "4.0.0-rc.5"; public const string DotnetRuntimeVersion = "6.0.6-test"; public const string DobbyVersion = "1.0.0"; @@ -60,14 +67,14 @@ public class BuildContext : FrostingContext VersionPrefix = props.GetPropertyValue("VersionPrefix"); CurrentCommit = ctx.GitLogTip(RootDirectory); - BleedingEdge = ctx.Argument("bleeding-edge", false); + BuildType = ctx.Argument("build-type", ProjectBuildType.Development); BuildId = ctx.Argument("build-id", -1); LastBuildCommit = ctx.Argument("last-build-commit", ""); NugetApiKey = ctx.Argument("nuget-api-key", ""); NugetSource = ctx.Argument("nuget-source", "https://nuget.bepinex.dev/v3/index.json"); } - public bool BleedingEdge { get; } + public ProjectBuildType BuildType { get; } public int BuildId { get; } public string LastBuildCommit { get; } public string NugetApiKey { get; } @@ -81,8 +88,20 @@ public class BuildContext : FrostingContext public string VersionPrefix { get; } public GitCommit CurrentCommit { get; } + public string VersionSuffix => BuildType switch + { + ProjectBuildType.Release => "", + ProjectBuildType.Development => "dev", + ProjectBuildType.BleedingEdge => $"be.{BuildId}", + var _ => throw new ArgumentOutOfRangeException() + }; + public string BuildPackageVersion => - $"{VersionPrefix}{(BleedingEdge ? $"-be.{BuildId}+{this.GitShortenSha(RootDirectory, CurrentCommit)}" : "")}"; + VersionPrefix + BuildType switch + { + ProjectBuildType.Release => "", + var _ => $"-{VersionSuffix}+{this.GitShortenSha(RootDirectory, CurrentCommit)}", + }; public static string DoorstopZipUrl(string arch) => $"https://github.com/NeighTools/UnityDoorstop/releases/download/v{DoorstopVersion}/doorstop_{arch}_release_{DoorstopVersion}.zip"; @@ -116,11 +135,11 @@ public sealed class CompileTask : FrostingTask { Configuration = "Release" }; - if (ctx.BleedingEdge) + if (ctx.BuildType != BuildContext.ProjectBuildType.Release) { buildSettings.MSBuildSettings = new() { - VersionSuffix = $"be.{ctx.BuildId}", + VersionSuffix = ctx.VersionSuffix, Properties = { ["SourceRevisionId"] = new[] { ctx.CurrentCommit.Sha }, @@ -272,7 +291,8 @@ public sealed class MakeDistTask : FrostingTask [TaskName("PushNuGet")] public sealed class PushNuGetTask : FrostingTask { - public override bool ShouldRun(BuildContext ctx) => !string.IsNullOrWhiteSpace(ctx.NugetApiKey); + public override bool ShouldRun(BuildContext ctx) => !string.IsNullOrWhiteSpace(ctx.NugetApiKey) && + ctx.BuildType != BuildContext.ProjectBuildType.Development; public override void Run(BuildContext ctx) {