From 20d2302d9c4aa02148df01c7f4f3487df6000778 Mon Sep 17 00:00:00 2001 From: Thog Date: Mon, 17 Feb 2020 02:34:49 +0100 Subject: [PATCH] Use GitHub Releases for official builds This get ride of AppVeyor for official builds once and for all. As people have been using AppVeyor for custom build and as number might clash with official releases, the minor version of the project was incremented. AppVeyor will still be used for PRs. Also to avoid more confusion between AppVeyor builds and official one, AppVeyor builds are now postfixed with "-prXXX". --- .github/actions/scripts/dotnet_publish | 10 + .github/workflows/build.yml | 3 +- .github/workflows/release.yml | 76 +++++++ .gitignore | 2 + ARMeilleure/ARMeilleure.csproj | 12 -- Ryujinx.Actions/Actions/Core.cs | 148 +++++++++++++ Ryujinx.Actions/Architecture.cs | 9 + Ryujinx.Actions/ArtifactInformation.cs | 111 ++++++++++ Ryujinx.Actions/BuildType.cs | 10 + Ryujinx.Actions/OperatingSystem.cs | 12 ++ Ryujinx.Actions/Program.cs | 203 ++++++++++++++++++ Ryujinx.Actions/ReleaseInformation.cs | 23 ++ Ryujinx.Actions/Ryujinx.Actions.csproj | 13 ++ Ryujinx.Actions/VersionCore.cs | 66 ++++++ Ryujinx.Audio/Ryujinx.Audio.csproj | 10 - Ryujinx.Common/Ryujinx.Common.csproj | 10 - .../Ryujinx.Graphics.Gpu.csproj | 8 - .../Ryujinx.Graphics.Nvdec.csproj | 7 - Ryujinx.HLE/Ryujinx.HLE.csproj | 10 - .../Ryujinx.Tests.Unicorn.csproj | 1 - Ryujinx.sln | 22 +- Ryujinx/Ryujinx.csproj | 3 +- appveyor.yml | 16 +- 23 files changed, 710 insertions(+), 75 deletions(-) create mode 100755 .github/actions/scripts/dotnet_publish create mode 100644 .github/workflows/release.yml create mode 100644 Ryujinx.Actions/Actions/Core.cs create mode 100644 Ryujinx.Actions/Architecture.cs create mode 100644 Ryujinx.Actions/ArtifactInformation.cs create mode 100644 Ryujinx.Actions/BuildType.cs create mode 100644 Ryujinx.Actions/OperatingSystem.cs create mode 100644 Ryujinx.Actions/Program.cs create mode 100644 Ryujinx.Actions/ReleaseInformation.cs create mode 100644 Ryujinx.Actions/Ryujinx.Actions.csproj create mode 100644 Ryujinx.Actions/VersionCore.cs diff --git a/.github/actions/scripts/dotnet_publish b/.github/actions/scripts/dotnet_publish new file mode 100755 index 0000000000..4ddc95fa05 --- /dev/null +++ b/.github/actions/scripts/dotnet_publish @@ -0,0 +1,10 @@ +#!/bin/bash + +# ensure the artifacts directory is created +mkdir -p $GITHUB_WORKSPACE/artifacts + +dotnet publish "Ryujinx/Ryujinx.csproj" -c "${BUILD_TYPE}" -r "${TARGET_OS}-${TARGET_ARCH}" /p:Version=$BUILD_VERSION + +pushd "$GITHUB_WORKSPACE/Ryujinx/bin/$BUILD_TYPE/netcoreapp3.0/$TARGET_OS-$TARGET_ARCH/publish/" +zip -9 -r $GITHUB_WORKSPACE/artifacts/ryujinx-$RELEASE_POSTFIX$BUILD_VERSION-$TARGET_OS\_$TARGET_ARCH.zip . +popd diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 86419b577b..1c8f5c685e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,7 +16,8 @@ jobs: environment: ['Debug', 'Release', 'Profile Debug', 'Profile Release'] name: ${{ matrix.environment }} build (Dotnet ${{ matrix.dotnet }}, OS ${{ matrix.os }}) steps: - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v2 - name: Setup dotnet uses: actions/setup-dotnet@v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..92541b6fb2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,76 @@ +name: "Release job" +on: + push: + branches: + - master + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup dotnet + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '3.1.100' + - name: Determine Build version + id: buildVersion + run: dotnet run --project "Ryujinx.Actions" + env: + INPUT_OPERATION: 'get-build-version' + INPUT_RELEASE_REPOSITORY: 'Ryujinx/binaries' + - name: "Print Build version" + run: "echo ${{ steps.buildVersion.outputs.release-version }}" + - name: Publish Windows for x64 + run: ./.github/actions/scripts/dotnet_publish + env: + BUILD_TYPE: Release + TARGET_OS: win + TARGET_ARCH: x64 + BUILD_VERSION: ${{ steps.buildVersion.outputs.release-version }} + - name: Publish Windows for x64 (Profiled) + run: ./.github/actions/scripts/dotnet_publish + env: + BUILD_TYPE: Profile Release + TARGET_OS: win + TARGET_ARCH: x64 + RELEASE_POSTFIX: profiled- + BUILD_VERSION: ${{ steps.buildVersion.outputs.release-version }} + - name: Publish Linux for x64 + run: ./.github/actions/scripts/dotnet_publish + env: + BUILD_TYPE: Release + TARGET_OS: linux + TARGET_ARCH: x64 + BUILD_VERSION: ${{ steps.buildVersion.outputs.release-version }} + - name: Publish Linux for x64 (Profiled) + run: ./.github/actions/scripts/dotnet_publish + env: + BUILD_TYPE: Profile Release + TARGET_OS: linux + TARGET_ARCH: x64 + RELEASE_POSTFIX: profiled- + BUILD_VERSION: ${{ steps.buildVersion.outputs.release-version }} + - name: Publish OSX for x64 + run: ./.github/actions/scripts/dotnet_publish + env: + BUILD_TYPE: Release + TARGET_OS: osx + TARGET_ARCH: x64 + BUILD_VERSION: ${{ steps.buildVersion.outputs.release-version }} + - name: Publish OSX for x64 (Profiled) + run: ./.github/actions/scripts/dotnet_publish + env: + BUILD_TYPE: Profile Release + TARGET_OS: osx + TARGET_ARCH: x64 + RELEASE_POSTFIX: profiled- + BUILD_VERSION: ${{ steps.buildVersion.outputs.release-version }} + - name: Publish to GitHub Release + run: dotnet run --project "Ryujinx.Actions" + env: + INPUT_OPERATION: 'publish-release' + INPUT_RELEASE_REPOSITORY: 'Ryujinx/binaries' + INPUT_RELEASE_VERSION: ${{ steps.buildVersion.outputs.release-version }} + INPUT_RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} diff --git a/.gitignore b/.gitignore index c0af260973..c5ab768370 100644 --- a/.gitignore +++ b/.gitignore @@ -164,3 +164,5 @@ launchSettings.json # NetCore Publishing Profiles PublishProfiles/ + +artifacts/ \ No newline at end of file diff --git a/ARMeilleure/ARMeilleure.csproj b/ARMeilleure/ARMeilleure.csproj index 9567838ecc..9724ad6b9f 100644 --- a/ARMeilleure/ARMeilleure.csproj +++ b/ARMeilleure/ARMeilleure.csproj @@ -3,25 +3,13 @@ netcoreapp3.0 win-x64;osx-x64;linux-x64 - - - - true - - - true - true true - - true - - diff --git a/Ryujinx.Actions/Actions/Core.cs b/Ryujinx.Actions/Actions/Core.cs new file mode 100644 index 0000000000..c18fc4efe8 --- /dev/null +++ b/Ryujinx.Actions/Actions/Core.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; + +namespace Ryujinx.Actions +{ + public class Core + { + private const string COMMAND_PREFIX = "::"; + + private static string EscapeBase(string data) + { + return data.Replace("%", "%25") + .Replace("\r", "%0D") + .Replace("\n", "%0A"); + } + + private static string EscapeMessage(string message) + { + return EscapeBase(message).Replace(":", "%3A").Replace(",", "%2C"); + } + + private static string ComputeString(string command, IDictionary properties, string message) + { + string result = $"{COMMAND_PREFIX}{command}"; + + if (properties != null && properties.Count > 0) + { + result += " "; + + bool isFirstProperty = true; + + foreach (KeyValuePair property in properties) + { + if (!isFirstProperty) + { + result += ","; + isFirstProperty = false; + } + + result += $"{property.Key}={EscapeBase(property.Value)}"; + } + } + + result += $"{COMMAND_PREFIX}{EscapeMessage(message)}"; + + return result; + } + + public static void Issue(string command, IDictionary properties = null, string message = "") + { + Console.Out.WriteLine(ComputeString(command, properties, message)); + } + + public static void ExportVariable(string name, string value) + { + Environment.SetEnvironmentVariable(name, value); + + Dictionary properties = new Dictionary(); + properties.Add("name", name); + + Issue("set-env", properties, value); + } + + public static void SetSecret(string secret) + { + Issue("add-mask", message: secret); + } + + public static void AddPath(string path) + { + Issue("add-path", message: path); + + string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine); + + Environment.SetEnvironmentVariable("Path", $"{path};{systemPath}"); + } + + public static string GetInput(string name) + { + string result = Environment.GetEnvironmentVariable($"INPUT_{name.Replace(" ", "_")}".ToUpper()); + + if (result != null) + { + return result.Trim(); + } + + return null; + } + + public static void SetOutput(string name, string value) + { + Dictionary properties = new Dictionary(); + properties.Add("name", name); + + Issue("set-output", properties, value); + } + + public static void SetFailed(string message) + { + Environment.ExitCode = 1; + + Error(message); + } + + public static void Debug(string message) + { + Issue("debug", message: message); + } + + public static void Error(string message) + { + Issue("error", message: message); + } + + public static void Warning(string message) + { + Issue("warning", message: message); + } + + public static void Info(string message) + { + Console.Out.WriteLine(message); + } + + public static void StartGroup(string name) + { + Issue("group", message: name); + } + + public static void EndGroup() + { + Issue("endgroup"); + } + + public static void SaveState(string name, string value) + { + Dictionary properties = new Dictionary(); + properties.Add("name", name); + + Issue("save-state", properties, value); + } + + public static string GetState(string name) + { + return Environment.GetEnvironmentVariable($"STATE_{name}"); + } + } +} diff --git a/Ryujinx.Actions/Architecture.cs b/Ryujinx.Actions/Architecture.cs new file mode 100644 index 0000000000..51800db90c --- /dev/null +++ b/Ryujinx.Actions/Architecture.cs @@ -0,0 +1,9 @@ +namespace Ryujinx.Actions +{ + public enum Architecture + { + Unknown, + X64, + AArch64 + } +} diff --git a/Ryujinx.Actions/ArtifactInformation.cs b/Ryujinx.Actions/ArtifactInformation.cs new file mode 100644 index 0000000000..f2de9bd4ea --- /dev/null +++ b/Ryujinx.Actions/ArtifactInformation.cs @@ -0,0 +1,111 @@ +using System.IO; +using System.Security.Cryptography; + +namespace Ryujinx.Actions +{ + public class ArtifactInformation + { + public OperatingSystem Os { get; private set; } + public Architecture Arch { get; private set; } + public BuildType BuildType { get; private set; } + public string Url { get; set; } + public string FileHash { get; private set; } + public string FileName { get; private set; } + + private static OperatingSystem GetOperatingSystemFromNamingPart(string part) + { + switch (part) + { + case "win": + return OperatingSystem.Windows; + case "osx": + return OperatingSystem.MacOSX; + case "linux": + return OperatingSystem.Linux; + case "android": + return OperatingSystem.Android; + case "ios": + return OperatingSystem.IOS; + default: + return OperatingSystem.Unknown; + } + } + + private static Architecture GetArchitectureFromNamingPart(string part) + { + switch (part) + { + case "x64": + return Architecture.X64; + case "aarch64": + return Architecture.AArch64; + default: + return Architecture.Unknown; + } + } + + public static ArtifactInformation FromFileName(string fileName) + { + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); + string[] fileNameParts = fileNameWithoutExtension.Split("-"); + + if (fileNameParts.Length != 3 && fileNameParts.Length != 4) + { + return null; + } + + ArtifactInformation artifactInformation = new ArtifactInformation(); + + artifactInformation.BuildType = BuildType.Release; + + bool isProfile = fileNameParts.Length == 4; + + if (isProfile) + { + artifactInformation.BuildType = BuildType.ProfileRelease; + } + + string targetConfiguration = isProfile ? fileNameParts[3] : fileNameParts[2]; + string[] targetConfigurationParts = targetConfiguration.Split("_"); + + if (targetConfigurationParts.Length != 2) + { + return null; + } + + artifactInformation.Os = GetOperatingSystemFromNamingPart(targetConfigurationParts[0]); + artifactInformation.Arch = GetArchitectureFromNamingPart(targetConfigurationParts[1]); + + return artifactInformation; + } + + public static ArtifactInformation FromFile(string path) + { + ArtifactInformation artifactInformation = FromFileName(path); + + if (artifactInformation == null) + { + return null; + } + + string fileHashString = ""; + + using (SHA256 hasher = SHA256.Create()) + { + using (FileStream fileStream = File.OpenRead(path)) + { + byte[] fileHash = hasher.ComputeHash(fileStream); + foreach (byte x in fileHash) + { + fileHashString += string.Format("{0:x2}", x); + } + } + } + + artifactInformation.FileName = Path.GetFileName(path); + artifactInformation.FileHash = fileHashString; + + return artifactInformation; + } + } +} diff --git a/Ryujinx.Actions/BuildType.cs b/Ryujinx.Actions/BuildType.cs new file mode 100644 index 0000000000..bd87be08d5 --- /dev/null +++ b/Ryujinx.Actions/BuildType.cs @@ -0,0 +1,10 @@ +namespace Ryujinx.Actions +{ + public enum BuildType + { + Debug, + Release, + ProfileDebug, + ProfileRelease + } +} \ No newline at end of file diff --git a/Ryujinx.Actions/OperatingSystem.cs b/Ryujinx.Actions/OperatingSystem.cs new file mode 100644 index 0000000000..f23906796c --- /dev/null +++ b/Ryujinx.Actions/OperatingSystem.cs @@ -0,0 +1,12 @@ +namespace Ryujinx.Actions +{ + public enum OperatingSystem + { + Unknown, + Windows, + MacOSX, + Linux, + Android, + IOS + } +} diff --git a/Ryujinx.Actions/Program.cs b/Ryujinx.Actions/Program.cs new file mode 100644 index 0000000000..1b23333698 --- /dev/null +++ b/Ryujinx.Actions/Program.cs @@ -0,0 +1,203 @@ +using Octokit; +using System; +using System.IO; +using System.Net; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace Ryujinx.Actions +{ + class Program + { + private const string GITHUB_USER_CONTENT_BASE_URL = "https://raw.githubusercontent.com/"; + private const string GITHUB_COMMIT_BASE_URL = "https://github.com/Ryujinx/Ryujinx/commit/"; + + private const string TARGET_JSON_NAME = "latest.json"; + + static void Main(string[] args) + { + string operation = Core.GetInput("operation"); + + if (operation == null) + { + Core.SetFailed("operation must be specified!"); + } + else + { + string releaseRepository; + + switch (operation) + { + case "get-build-version": + releaseRepository = Core.GetInput("release_repository"); + + string releaseInformationUrl = GITHUB_USER_CONTENT_BASE_URL + releaseRepository + "/master/" + TARGET_JSON_NAME; + + WebClient webClient = new WebClient(); + + string latestVersion = webClient.DownloadString(releaseInformationUrl); + + ReleaseInformation releaseInformation = JsonSerializer.Deserialize(latestVersion, CreateJsonOptions()); + + releaseInformation.Version.IncrementPatch(); + + Core.SetOutput("release-version", releaseInformation.Version.ToString()); + break; + case "publish-release": + string githubWorkspace = Environment.GetEnvironmentVariable("GITHUB_WORKSPACE"); + string artifactDirectory = Core.GetInput("artifacts_directory"); + string releaseToken = Core.GetInput("release_token"); + + releaseRepository = Core.GetInput("release_repository"); + + // Mark the token as secret + Core.SetSecret(releaseToken); + + if (artifactDirectory == null) + { + artifactDirectory = "artifacts"; + } + + string artifactFullPath = Path.Join(githubWorkspace, artifactDirectory); + string releaseVersion = Core.GetInput("release_version"); + + PublishRelease(artifactFullPath, VersionCore.FromString(releaseVersion), releaseRepository, releaseToken).Wait(); + break; + default: + Core.SetFailed($"Unknown operation {operation} must be specified!"); + break; + } + } + } + + private static GitHubClient CreateGitHubClientInstance(string releaseToken) + { + GitHubClient client = new GitHubClient(new ProductHeaderValue("Ryujinx.Actions", "1.0.0")); + + client.Credentials = new Credentials(releaseToken); + + return client; + } + + private static JsonSerializerOptions CreateJsonOptions() + { + JsonSerializerOptions serializeOptions = new JsonSerializerOptions + { + IgnoreNullValues = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true + }; + + serializeOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase)); + serializeOptions.Converters.Add(new VersionCore.Converter()); + + return serializeOptions; + } + + private static Task UploadAsset(GitHubClient client, Release release, Stream stream, string fileName, string contentType) + { + Core.Info($"Uploading {fileName}"); + + ReleaseAssetUpload assetUpload = new ReleaseAssetUpload() + { + FileName = fileName, + ContentType = contentType, + RawData = stream, + Timeout = TimeSpan.FromMinutes(30) + }; + + return client.Repository.Release.UploadAsset(release, assetUpload); + } + + private static async Task UploadArtifact(GitHubClient client, Release release, string artifactDirectory, ArtifactInformation artifactInformation) + { + using (FileStream fileStream = File.OpenRead(Path.Combine(artifactDirectory, artifactInformation.FileName))) + { + await UploadAsset(client, release, fileStream, artifactInformation.FileName, "application/zip"); + } + } + + private static async Task PublishRelease(string artifactDirectory, VersionCore releaseVersion, string releaseRepository, string releaseToken) + { + if (releaseVersion == null) + { + Core.SetFailed("Invalid release_version!"); + return; + } + + if (releaseToken == null) + { + Core.SetFailed("Invalid release_token!"); + return; + } + + if (releaseRepository == null) + { + Core.SetFailed("Invalid release_repository!"); + return; + } + + string commitSha = Environment.GetEnvironmentVariable("GITHUB_SHA"); + + if (commitSha == null) + { + Core.SetFailed("GITHUB_SHA environment variable not found!"); + return; + } + + string[] releaseRepositoryParts = releaseRepository.Split("/"); + + if (releaseRepositoryParts.Length != 2) + { + Core.SetFailed("Invalid release_repository!"); + return; + } + + string releaseRepositoryOwner = releaseRepositoryParts[0]; + string releaseRepositoryName = releaseRepositoryParts[1]; + + ReleaseInformation releaseInformation = new ReleaseInformation(releaseVersion); + + foreach (string file in Directory.GetFiles(artifactDirectory, $"ryujinx*-{releaseVersion}-*.zip")) + { + ArtifactInformation artifactInformation = ArtifactInformation.FromFile(file); + + releaseInformation.Artifacts.Add(artifactInformation); + } + + GitHubClient client = CreateGitHubClientInstance(releaseToken); + + // Create a new release + NewRelease newRelease = new NewRelease($"build-{commitSha}"); + newRelease.Name = releaseVersion.ToString(); + newRelease.Body = $"Triggered by {GITHUB_COMMIT_BASE_URL}{commitSha}."; + newRelease.Draft = true; + newRelease.Prerelease = false; + + Release release = await client.Repository.Release.Create(releaseRepositoryOwner, releaseRepositoryName, newRelease); + ReleaseUpdate updateRelease = release.ToUpdate(); + + // Upload artifacts + foreach (ArtifactInformation information in releaseInformation.Artifacts) + { + await UploadArtifact(client, release, artifactDirectory, information); + } + + string releaseInformationJson = JsonSerializer.Serialize(releaseInformation, CreateJsonOptions()); + + // Upload release information + using (MemoryStream releaseInformationStream = new MemoryStream(Encoding.UTF8.GetBytes(releaseInformationJson))) + { + await UploadAsset(client, release, releaseInformationStream, "release_information.json", "application/json"); + } + + updateRelease.Draft = false; + + release = await client.Repository.Release.Edit(releaseRepositoryOwner, releaseRepositoryName, release.Id, updateRelease); + + Core.Info($"Successfully published release {releaseVersion} to {release.HtmlUrl}"); + } + } +} diff --git a/Ryujinx.Actions/ReleaseInformation.cs b/Ryujinx.Actions/ReleaseInformation.cs new file mode 100644 index 0000000000..7668f2b323 --- /dev/null +++ b/Ryujinx.Actions/ReleaseInformation.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Ryujinx.Actions +{ + public class ReleaseInformation + { + public VersionCore Version { get; set; } + public List Artifacts { get; set; } + + private ReleaseInformation() + { + + } + + public ReleaseInformation(VersionCore version) + { + Version = version; + Artifacts = new List(); + } + } +} diff --git a/Ryujinx.Actions/Ryujinx.Actions.csproj b/Ryujinx.Actions/Ryujinx.Actions.csproj new file mode 100644 index 0000000000..d07f00979c --- /dev/null +++ b/Ryujinx.Actions/Ryujinx.Actions.csproj @@ -0,0 +1,13 @@ + + + + netcoreapp3.0 + win-x64;osx-x64;linux-x64 + Exe + + + + + + + diff --git a/Ryujinx.Actions/VersionCore.cs b/Ryujinx.Actions/VersionCore.cs new file mode 100644 index 0000000000..18be931619 --- /dev/null +++ b/Ryujinx.Actions/VersionCore.cs @@ -0,0 +1,66 @@ +using System; +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.RegularExpressions; + +namespace Ryujinx.Actions +{ + public class VersionCore + { + private static readonly Regex REGEX = new Regex(@"^(?\d+)" + + @"(?>\.(?\d+))?" + + @"(?>\.(?\d+))?$", + RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.ExplicitCapture); + + public uint Major { get; private set; } + public uint Minor { get; private set; } + public uint Patch { get; private set; } + + public VersionCore(uint major, uint minor, uint patch) + { + Major = major; + Minor = minor; + Patch = patch; + } + + public void IncrementPatch() + { + Patch++; + } + + public override string ToString() + { + return $"{Major}.{Minor}.{Patch}"; + } + + public static VersionCore FromString(string version) + { + Match match = REGEX.Match(version); + + if (!match.Success) + { + return null; + } + + uint major = uint.Parse(match.Groups["major"].Value, CultureInfo.InvariantCulture); + uint minor = uint.Parse(match.Groups["minor"].Value, CultureInfo.InvariantCulture); + uint patch = uint.Parse(match.Groups["patch"].Value, CultureInfo.InvariantCulture); + + return new VersionCore(major, minor, patch); + } + + public class Converter : JsonConverter + { + public override VersionCore Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return FromString(reader.GetString()); + } + + public override void Write(Utf8JsonWriter writer, VersionCore value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString()); + } + } + } +} diff --git a/Ryujinx.Audio/Ryujinx.Audio.csproj b/Ryujinx.Audio/Ryujinx.Audio.csproj index 80940c770e..b4cbf7e439 100644 --- a/Ryujinx.Audio/Ryujinx.Audio.csproj +++ b/Ryujinx.Audio/Ryujinx.Audio.csproj @@ -4,24 +4,14 @@ netcoreapp3.0 win-x64;osx-x64;linux-x64 Debug;Release;Profile Debug;Profile Release - - - true - true TRACE;USE_DEBUGGING - false - - - - true - true TRACE;USE_DEBUGGING true diff --git a/Ryujinx.Common/Ryujinx.Common.csproj b/Ryujinx.Common/Ryujinx.Common.csproj index 1b7cf8afbf..c969927b25 100644 --- a/Ryujinx.Common/Ryujinx.Common.csproj +++ b/Ryujinx.Common/Ryujinx.Common.csproj @@ -4,24 +4,14 @@ netcoreapp3.0 win-x64;osx-x64;linux-x64 Debug;Release;Profile Debug;Profile Release - - - true - true TRACE;USE_DEBUGGING - false - - - - true - true TRACE;USE_DEBUGGING true diff --git a/Ryujinx.Graphics.Gpu/Ryujinx.Graphics.Gpu.csproj b/Ryujinx.Graphics.Gpu/Ryujinx.Graphics.Gpu.csproj index a55c4d1ceb..564acc1162 100644 --- a/Ryujinx.Graphics.Gpu/Ryujinx.Graphics.Gpu.csproj +++ b/Ryujinx.Graphics.Gpu/Ryujinx.Graphics.Gpu.csproj @@ -11,14 +11,6 @@ netcoreapp3.0 win-x64;osx-x64;linux-x64 - - - true - - - true - - diff --git a/Ryujinx.Graphics.Nvdec/Ryujinx.Graphics.Nvdec.csproj b/Ryujinx.Graphics.Nvdec/Ryujinx.Graphics.Nvdec.csproj index 63289e53d4..ad6b1d99eb 100644 --- a/Ryujinx.Graphics.Nvdec/Ryujinx.Graphics.Nvdec.csproj +++ b/Ryujinx.Graphics.Nvdec/Ryujinx.Graphics.Nvdec.csproj @@ -3,13 +3,6 @@ netcoreapp3.0 win-x64;osx-x64;linux-x64 - - - - true - - - true diff --git a/Ryujinx.HLE/Ryujinx.HLE.csproj b/Ryujinx.HLE/Ryujinx.HLE.csproj index e9540ab876..b0f060e5d3 100644 --- a/Ryujinx.HLE/Ryujinx.HLE.csproj +++ b/Ryujinx.HLE/Ryujinx.HLE.csproj @@ -4,24 +4,14 @@ netcoreapp3.0 win-x64;osx-x64;linux-x64 Debug;Release;Profile Debug;Profile Release - - - true - true TRACE;USE_DEBUGGING - false - - - - true - true TRACE;USE_DEBUGGING true diff --git a/Ryujinx.Tests.Unicorn/Ryujinx.Tests.Unicorn.csproj b/Ryujinx.Tests.Unicorn/Ryujinx.Tests.Unicorn.csproj index f99f504a75..85701ac821 100644 --- a/Ryujinx.Tests.Unicorn/Ryujinx.Tests.Unicorn.csproj +++ b/Ryujinx.Tests.Unicorn/Ryujinx.Tests.Unicorn.csproj @@ -18,7 +18,6 @@ TRACE;USE_DEBUGGING - false diff --git a/Ryujinx.sln b/Ryujinx.sln index 40a086e5f2..38b0d1bcec 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -31,9 +31,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Texture", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", "Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj", "{03B955CD-AD84-4B93-AAA7-BF17923BBAA5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Nvdec", "Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Debugger", "Ryujinx.Debugger\Ryujinx.Debugger.csproj", "{79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Debugger", "Ryujinx.Debugger\Ryujinx.Debugger.csproj", "{79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Actions", "Ryujinx.Actions\Ryujinx.Actions.csproj", "{B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -163,14 +165,6 @@ Global {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Profile Release|Any CPU.Build.0 = Release|Any CPU {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Debug|Any CPU.ActiveCfg = Profile Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Debug|Any CPU.Build.0 = Profile Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Release|Any CPU.ActiveCfg = Profile Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Release|Any CPU.Build.0 = Profile Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Release|Any CPU.Build.0 = Release|Any CPU {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Debug|Any CPU.Build.0 = Debug|Any CPU {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Profile Debug|Any CPU.ActiveCfg = Profile Debug|Any CPU @@ -179,6 +173,14 @@ Global {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Profile Release|Any CPU.Build.0 = Profile Release|Any CPU {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Release|Any CPU.ActiveCfg = Release|Any CPU {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Release|Any CPU.Build.0 = Release|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Profile Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Profile Debug|Any CPU.Build.0 = Debug|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Profile Release|Any CPU.ActiveCfg = Release|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Profile Release|Any CPU.Build.0 = Release|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B4BB6784-3F94-4EEB-AFA1-3D497D2DC0AB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Ryujinx/Ryujinx.csproj b/Ryujinx/Ryujinx.csproj index 25eb8ff477..5a5a07776f 100644 --- a/Ryujinx/Ryujinx.csproj +++ b/Ryujinx/Ryujinx.csproj @@ -6,7 +6,7 @@ Exe true Debug;Release;Profile Debug;Profile Release - 1.0.0-dirty + 1.1.0-dirty @@ -16,7 +16,6 @@ TRACE;USE_DEBUGGING - false diff --git a/appveyor.yml b/appveyor.yml index 4fcf50503e..0cf00a01ce 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,7 +1,4 @@ -version: 1.0.{build} -branches: - only: - - master +version: 1.0.0 image: Visual Studio 2019 environment: matrix: @@ -12,6 +9,17 @@ environment: config_name: '-profiled-' build_script: - ps: >- + # Ensure that we are in a PR + if (-not (Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER)) { + throw "This should only be trigger on pull request build!" + } + + # change version to contain the PR + $version = "$version-pr$env:APPVEYOR_PULL_REQUEST_NUMBER" + + # update AppVeyor build + Update-AppveyorBuild -Version $version + dotnet --version dotnet publish -c $env:config -r win-x64 /p:Version=$env:APPVEYOR_BUILD_VERSION