This commit is contained in:
Florian Rappl 2021-04-21 23:58:20 +02:00
Родитель 3fdf871f2a
Коммит f1ecd51c01
9 изменённых файлов: 77 добавлений и 63 удалений

13
.github/CONTRIBUTING.md поставляемый
Просмотреть файл

@ -26,9 +26,12 @@ Discussion of issues should be placed transparently in the issue tracker here on
* [AngleSharp.Core](https://github.com/AngleSharp/AngleSharp/issues/) * [AngleSharp.Core](https://github.com/AngleSharp/AngleSharp/issues/)
* [AngleSharp.Css](https://github.com/AngleSharp/AngleSharp.Css/issues/) * [AngleSharp.Css](https://github.com/AngleSharp/AngleSharp.Css/issues/)
* [AngleSharp.Diffing](https://github.com/AngleSharp/AngleSharp.Diffing/issues/)
* [AngleSharp.Io](https://github.com/AngleSharp/AngleSharp.Io/issues/) * [AngleSharp.Io](https://github.com/AngleSharp/AngleSharp.Io/issues/)
* [AngleSharp.Js](https://github.com/AngleSharp/AngleSharp.Js/issues/) * [AngleSharp.Js](https://github.com/AngleSharp/AngleSharp.Js/issues/)
* [AngleSharp.Xml](https://github.com/AngleSharp/AngleSharp.Xml/issues/) * [AngleSharp.Xml](https://github.com/AngleSharp/AngleSharp.Xml/issues/)
* [AngleSharp.XPath](https://github.com/AngleSharp/AngleSharp.XPath/issues/)
* [AngleSharp.Wasm](https://github.com/AngleSharp/AngleSharp.Wasm/issues/)
### Modifying the code ### Modifying the code
@ -76,19 +79,19 @@ Here we now created a new branch called `devel`. This is the development branch.
Now active work is supposed to be done. Therefore a new branch should be created. Let's create one: Now active work is supposed to be done. Therefore a new branch should be created. Let's create one:
``` ```sh
git checkout -b feature/#777 git checkout -b feature/#777
``` ```
There may be many of these feature branches. Most of them are also pushed to the server for discussion or synchronization. There may be many of these feature branches. Most of them are also pushed to the server for discussion or synchronization.
``` ```sh
git push -u origin feature/#777 git push -u origin feature/#777
``` ```
Now feature branches may be closed when they are done. Here we simply merge with the feature branch(es). For instance the following command takes the `feature/#777` branch from the server and merges it with the `devel` branch. Now feature branches may be closed when they are done. Here we simply merge with the feature branch(es). For instance the following command takes the `feature/#777` branch from the server and merges it with the `devel` branch.
``` ```sh
git checkout devel git checkout devel
git pull git pull
git pull origin feature/#777 git pull origin feature/#777
@ -97,7 +100,7 @@ git push
Finally, we may have all the features that are needed to release a new version of AngleSharp. Here we tag the release. For instance for the 1.0 release we use `v1.0`. Finally, we may have all the features that are needed to release a new version of AngleSharp. Here we tag the release. For instance for the 1.0 release we use `v1.0`.
``` ```sh
git checkout master git checkout master
git merge devel git merge devel
git tag v1.0 git tag v1.0
@ -109,7 +112,7 @@ git tag v1.0
The following files should not be edited directly in the current repository, but rather in the `AngleSharp.GitBase` repository. They are then synced via `git pull` from a different remote. The following files should not be edited directly in the current repository, but rather in the `AngleSharp.GitBase` repository. They are then synced via `git pull` from a different remote.
``` ```plaintext
.editorconfig .editorconfig
.gitignore .gitignore
.gitattributes .gitattributes

4
.github/FUNDING.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,4 @@
# These are supported funding model platforms
github: FlorianRappl
custom: https://salt.bountysource.com/teams/anglesharp

33
.github/workflows/ci.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,33 @@
name: CI
on: [push, pull_request]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
jobs:
linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build
run: ./build.sh
windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Build
run: |
if ($env:GITHUB_REF -eq "refs/heads/master") {
.\build.ps1 -Target Publish
} elseif ($env:GITHUB_REF -eq "refs/heads/devel") {
.\build.ps1 -Target PrePublish
} else {
.\build.ps1
}

Просмотреть файл

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2013 - 2019 AngleSharp Copyright (c) 2013 - 2021 AngleSharp
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

Просмотреть файл

@ -1,20 +0,0 @@
version: '{build}'
branches:
only:
- master
- devel
skip_tags: true
image: Visual Studio 2015
configuration: Release
platform: Any CPU
build_script:
- ps: >-
if ($env:APPVEYOR_PULL_REQUEST_NUMBER -eq $null -and $env:APPVEYOR_REPO_BRANCH -eq "master") {
.\build.ps1 -Target Publish
} elseif ($env:APPVEYOR_PULL_REQUEST_NUMBER -eq $null -and $env:APPVEYOR_REPO_BRANCH -eq "devel") {
.\build.ps1 -Target PrePublish
} else {
.\build.ps1 -Target AppVeyor
}
test: off
deploy: off

Просмотреть файл

@ -26,17 +26,17 @@ $NUGET_OLD_URL = "https://dist.nuget.org/win-x86-commandline/v3.5.0/nuget.exe"
# Should we use experimental build of Roslyn? # Should we use experimental build of Roslyn?
$UseExperimental = ""; $UseExperimental = "";
if ($Experimental.IsPresent) { if ($Experimental.IsPresent) {
$UseExperimental = "-experimental" $UseExperimental = "--experimental"
} }
# Is this a dry run? # Is this a dry run?
if ($WhatIf.IsPresent) { if ($WhatIf.IsPresent) {
$UseDryRun = "-dryrun" $UseDryRun = "--dryrun"
} }
# Should we use mono? # Should we use mono?
if ($Mono.IsPresent) { if ($Mono.IsPresent) {
$UseMono = "-mono" $UseMono = "--mono"
} }
# Try download NuGet.exe if do not exist. # Try download NuGet.exe if do not exist.
@ -77,5 +77,5 @@ if (!(Test-Path $CAKE_EXE)) {
} }
# Start Cake # Start Cake
Invoke-Expression "$CAKE_EXE `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" Invoke-Expression "$CAKE_EXE `"$Script`" --target=`"$Target`" --configuration=`"$Configuration`" --verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs"
exit $LASTEXITCODE exit $LASTEXITCODE

Просмотреть файл

@ -27,7 +27,7 @@ for i in "$@"; do
-t|--target) TARGET="$2"; shift ;; -t|--target) TARGET="$2"; shift ;;
-c|--configuration) CONFIGURATION="$2"; shift ;; -c|--configuration) CONFIGURATION="$2"; shift ;;
-v|--verbosity) VERBOSITY="$2"; shift ;; -v|--verbosity) VERBOSITY="$2"; shift ;;
-d|--dryrun) DRYRUN="-dryrun" ;; -d|--dryrun) DRYRUN="--dryrun" ;;
--version) SHOW_VERSION=true ;; --version) SHOW_VERSION=true ;;
--) shift; SCRIPT_ARGUMENTS+=("$@"); break ;; --) shift; SCRIPT_ARGUMENTS+=("$@"); break ;;
*) SCRIPT_ARGUMENTS+=("$1") ;; *) SCRIPT_ARGUMENTS+=("$1") ;;
@ -87,7 +87,7 @@ fi
# Start Cake # Start Cake
if $SHOW_VERSION; then if $SHOW_VERSION; then
exec mono $CAKE_EXE -version exec mono $CAKE_EXE --version
else else
exec mono $CAKE_EXE $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" exec mono $CAKE_EXE $SCRIPT --verbosity=$VERBOSITY --configuration=$CONFIGURATION --target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}"
fi fi

Просмотреть файл

@ -5,23 +5,32 @@ using Octokit;
var configuration = Argument("configuration", "Release"); var configuration = Argument("configuration", "Release");
var isRunningOnUnix = IsRunningOnUnix(); var isRunningOnUnix = IsRunningOnUnix();
var isRunningOnWindows = IsRunningOnWindows(); var isRunningOnWindows = IsRunningOnWindows();
var isRunningOnAppVeyor = AppVeyor.IsRunningOnAppVeyor; var isRunningOnGitHubActions = BuildSystem.GitHubActions.IsRunningOnGitHubActions;
var isPullRequest = AppVeyor.Environment.PullRequest.IsPullRequest;
var buildNumber = AppVeyor.Environment.Build.Number;
var releaseNotes = ParseReleaseNotes("./CHANGELOG.md"); var releaseNotes = ParseReleaseNotes("./CHANGELOG.md");
var version = releaseNotes.Version.ToString(); var version = releaseNotes.Version.ToString();
var buildDir = Directory($"./src/{projectName}/bin") + Directory(configuration); var buildDir = Directory($"./src/{projectName}/bin") + Directory(configuration);
var buildResultDir = Directory("./bin") + Directory(version); var buildResultDir = Directory("./bin") + Directory(version);
var nugetRoot = buildResultDir + Directory("nuget"); var nugetRoot = buildResultDir + Directory("nuget");
if (target == "PrePublish") if (isRunningOnGitHubActions)
{ {
version = $"{version}-alpha-{buildNumber}"; var buildNumber = BuildSystem.GitHubActions.Environment.Workflow.RunNumber;
if (target == "Default")
{
version = $"{version}-ci-{buildNumber}";
}
else if (target == "PrePublish")
{
version = $"{version}-alpha-{buildNumber}";
}
} }
if (!isRunningOnWindows) if (!isRunningOnWindows)
{ {
frameworks.Remove("net46"); frameworks.Remove("net46");
frameworks.Remove("net461");
frameworks.Remove("net472");
} }
// Initialization // Initialization
@ -74,13 +83,9 @@ Task("Run-Unit-Tests")
Configuration = configuration, Configuration = configuration,
}; };
if (isRunningOnAppVeyor) if (isRunningOnGitHubActions)
{ {
settings.TestAdapterPath = Directory("."); settings.Loggers.Add("GitHubActions");
settings.Logger = "Appveyor";
// TODO Finds a way to exclude tests not allowed to run on appveyor
// Not used in current code
//settings.Where = "cat != ExcludeFromAppVeyor";
} }
DotNetCoreTest($"./src/{solutionName}.Tests/", settings); DotNetCoreTest($"./src/{solutionName}.Tests/", settings);
@ -101,7 +106,10 @@ Task("Copy-Files")
}, targetDir); }, targetDir);
} }
CopyFiles(new FilePath[] { $"src/{projectName}.nuspec" }, nugetRoot); CopyFiles(new FilePath[] {
$"src/{projectName}.nuspec",
"logo.png"
}, nugetRoot);
}); });
Task("Create-Package") Task("Create-Package")
@ -109,7 +117,6 @@ Task("Create-Package")
.Does(() => .Does(() =>
{ {
var nugetExe = GetFiles("./tools/**/nuget.exe").FirstOrDefault() var nugetExe = GetFiles("./tools/**/nuget.exe").FirstOrDefault()
?? (isRunningOnAppVeyor ? GetFiles("C:\\Tools\\NuGet3\\nuget.exe").FirstOrDefault() : null)
?? throw new InvalidOperationException("Could not find nuget.exe."); ?? throw new InvalidOperationException("Could not find nuget.exe.");
var nuspec = nugetRoot + File($"{projectName}.nuspec"); var nuspec = nugetRoot + File($"{projectName}.nuspec");
@ -153,7 +160,7 @@ Task("Publish-Release")
.IsDependentOn("Run-Unit-Tests") .IsDependentOn("Run-Unit-Tests")
.Does(() => .Does(() =>
{ {
var githubToken = EnvironmentVariable("GITHUB_API_TOKEN"); var githubToken = EnvironmentVariable("GITHUB_TOKEN");
if (String.IsNullOrEmpty(githubToken)) if (String.IsNullOrEmpty(githubToken))
{ {
@ -175,14 +182,6 @@ Task("Publish-Release")
}).Wait(); }).Wait();
}); });
Task("Update-AppVeyor-Build-Number")
.WithCriteria(() => isRunningOnAppVeyor)
.Does(() =>
{
var num = AppVeyor.Environment.Build.Number;
AppVeyor.UpdateBuildVersion($"{version}-{num}");
});
// Targets // Targets
// ---------------------------------------- // ----------------------------------------
@ -194,12 +193,7 @@ Task("Default")
.IsDependentOn("Package"); .IsDependentOn("Package");
Task("Publish") Task("Publish")
.IsDependentOn("Publish-Package")
.IsDependentOn("Publish-Release"); .IsDependentOn("Publish-Release");
Task("PrePublish") Task("PrePublish")
.IsDependentOn("Publish-Package"); .IsDependentOn("Publish-Package");
Task("AppVeyor")
.IsDependentOn("Run-Unit-Tests")
.IsDependentOn("Update-AppVeyor-Build-Number");

Просмотреть файл

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Cake" version="0.30.0" /> <package id="Cake" version="1.1.0" />
<package id="NUnit.ConsoleRunner" version="3.9.0" /> <package id="NUnit.ConsoleRunner" version="3.12.0" />
<package id="Octokit" version="0.17.0" /> <package id="Octokit" version="0.50.0" />
</packages> </packages>