From e4e387cd4ec9233a9244e6aee2f7abac31961353 Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Thu, 13 Feb 2020 15:30:41 -0800 Subject: [PATCH] Add a Github Action to verify shared source files are in sync (#19024) https://github.com/dotnet/runtime/issues/1584 --- .github/CODEOWNERS | 4 +- .github/workflows/runtime-sync.yml | 84 ++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/runtime-sync.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 42b6a58971..ce75c6821d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -19,6 +19,6 @@ # /src/ProjectTemplates/ @ryanbrandenburg /src/Security/ @tratcher @anurse /src/Servers/ @tratcher @jkotalik @anurse @halter73 -/src/Shared/Http2/ @aspnet/http2 -/src/Shared/test/Shared.Tests/Http2/ @aspnet/http2 +/src/Shared/runtime/ @dotnet/http +/src/Shared/test/Shared.Tests/runtime/ @dotnet/http /src/SignalR/ @BrennanConroy @halter73 @anurse diff --git a/.github/workflows/runtime-sync.yml b/.github/workflows/runtime-sync.yml new file mode 100644 index 0000000000..66c0cbc192 --- /dev/null +++ b/.github/workflows/runtime-sync.yml @@ -0,0 +1,84 @@ +name: AspNetCore-Runtime Code Sync +on: + # Test this script using on: push + # push + schedule: + # * is a special character in YAML so you have to quote this string + # https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows#scheduled-events-schedule + # Once per day at midnight PST (8 UTC) + - cron: '0 8 * * *' + +jobs: + compare_repos: + name: Compare the shared code in the AspNetCore and Runtime repos and notify if they're out of sync. + runs-on: windows-latest + steps: + - name: Checkout aspnetcore + uses: actions/checkout@v2.0.0 + with: + # Test this script using changes in a fork + # repository: 'Tratcher/aspnetcore' + repository: 'dotnet/aspnetcore' + path: aspnetcore + - name: Checkout runtime + uses: actions/checkout@v2.0.0 + with: + # Test this script using changes in a fork + # repository: 'Tratcher/runtime' + repository: 'dotnet/runtime' + path: runtime + - name: Copy + shell: cmd + working-directory: .\runtime\src\libraries\Common\src\System\Net\Http\aspnetcore\ + env: + ASPNETCORE_REPO: d:\a\aspnetcore\aspnetcore\aspnetcore\ + run: | + dir + CopyToAspNetCore.cmd + - name: Diff + shell: cmd + working-directory: .\aspnetcore\ + run: | + mkdir ..\artifacts + git status > ..\artifacts\status.txt + git diff > ..\artifacts\diff.txt + - uses: actions/upload-artifact@v1 + with: + name: results + path: artifacts + - name: Check and Notify + shell: pwsh + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Check the code is in sync + $changed = (select-string "nothing to commit" artifacts\status.txt).count -eq 0 + if (-not $changed) { exit } + # Test this script using an issue in the local forked repo + # $issue = 'https://api.github.com/repos/Tratcher/aspnetcore/issues/1' + $issue = 'https://api.github.com/repos/dotnet/aspnetcore/issues/18943' + # Check if tracking issue is open/closed + $Headers = @{ Authorization = 'token {0}' -f $ENV:GITHUB_TOKEN; }; + $result = Invoke-RestMethod -Uri $issue + if ($result.state -eq "closed") { + $json = "{ `"state`": `"open`" }" + $result = Invoke-RestMethod -Method PATCH -Headers $Headers -Uri $issue -Body $json + } + # Add a comment + $status = [IO.File]::ReadAllText("artifacts\status.txt") + $diff = [IO.File]::ReadAllText("artifacts\diff.txt") + $body = @" + The shared code is out of sync. +
+ The Diff + + `````` + $status + $diff + `````` + +
+ "@ + $json = ConvertTo-Json -InputObject @{ 'body' = $body } + $issue = $issue + '/comments' + $result = Invoke-RestMethod -Method POST -Headers $Headers -Uri $issue -Body $json