diff --git a/bin/record_expected_output b/bin/record_expected_output index d90ab1f..8d88bdc 100755 --- a/bin/record_expected_output +++ b/bin/record_expected_output @@ -1,14 +1,14 @@ #! /usr/bin/env sh if [ "local" = "$1" ]; then - export JEKYLL_ENV=production - export PAGES_REPO_NWO=actions/jekyll-build-pages - export JEKYLL_BUILD_REVISION=JEKYLL_BUILD_REVISION + export JEKYLL_ENV=production + export PAGES_REPO_NWO=actions/jekyll-build-pages + export JEKYLL_BUILD_REVISION=JEKYLL_BUILD_REVISION - for dir in $(ls test_projects) - do - bundle exec github-pages build --verbose -s test_projects/$dir -d test_projects/$dir/_expected - done + for dir in $(ls test_projects) + do + bundle exec github-pages build --verbose -s test_projects/$dir -d test_projects/$dir/_expected + done else - act -b -s GITHUB_TOKEN -j record-expected-output + act -b -s GITHUB_TOKEN -j record-expected-output fi diff --git a/bin/sync_expected_output.ps1 b/bin/sync_expected_output.ps1 new file mode 100755 index 0000000..ce3fbb7 --- /dev/null +++ b/bin/sync_expected_output.ps1 @@ -0,0 +1,96 @@ +#!/usr/bin/env pwsh +#Requires -Version 7.2 + +<# +.SYNOPSIS +Trigger the workflow that records the tests expected outputs, wait for its execution to finish, +then bring back those results locally. + +.DESCRIPTION +This script is meant to run locally outside of Actions. It relies on `gh` and `git`. +#> + +# Get the repository's path (ps1 extension on the script is required for PSScriptRoot to be available 🤦) +$repositoryPath = Resolve-Path (Join-Path $PSScriptRoot '..') + +# Get the test_project's path +$testProjectsPath = Resolve-Path (Join-Path $PSScriptRoot '../test_projects') + +# +# Utilities +# + +# Run a command and validate it returned a 0 exit code +function Invoke-Command { + param ( + [ScriptBlock] $Command + ) + + & $Command + if ($LASTEXITCODE -ne 0) { + Write-Error "Command failed: $Command" + throw + } +} + +# Get the current git ref name +function Get-GitRef { + $commitId = Invoke-Command { & git -C $repositoryPath rev-parse --abbrev-ref HEAD } + $commitId.Trim() +} + +# Create a temp folder and return its path +function New-TemporaryFolder { + $path = Join-Path ([System.IO.Path]::GetTempPath()) ([System.Guid]::NewGuid()) + New-Item -ItemType 'Directory' -Path $path | Out-Null + $path +} + +# +# Main +# + +# Init +Set-StrictMode -version 'Latest' +$ErrorActionPreference = 'Stop' + +# Get git ref name +$ref = Get-GitRef + +# Run the workflow +Write-Host 'Queue workflow' +$workflow = 'record.yml' +Invoke-Command { & gh workflow run $workflow --ref $ref | Out-Null } + +# Wait for a few seconds for the workflow to get created +Write-Host 'Wait a few seconds...' +Start-Sleep -Seconds 5 + +# Lookup the run id (it is not perfect because of the APIs...) +Write-Host 'Lookup run id' +$runId = Invoke-Command { & gh run list --workflow $workflow --branch $ref --limit 1 --json databaseId --jq '.[].databaseId' } + +# Wait for the workflow to finish +Write-Host "Wait for workflow $runId to complete" +Invoke-Command { & gh run watch $runId --exit-status } + +# Download the artifacts in a temp folder +Write-Host 'Download artifacts' +$tempFolder = New-TemporaryFolder +Invoke-Command { & gh run download $runId --dir $tempFolder } + +# Iterate over the test projects +Get-ChildItem -Path $testProjectsPath -Directory | ForEach-Object { + # Construct the artifact path and make sure a matching artifact is found + $artifactPath = Join-Path $tempFolder $_.BaseName + if (Test-Path $artifactPath -PathType 'Container') { + # Copy artifact to the expected output folder + $destinationPath = Join-Path $testProjectsPath $_.BaseName '_expected' + Copy-Item -Path (Join-Path $artifactPath '*') -Destination $destinationPath -Recurse -Force | Out-Null + } + + # Ignore test project + else { + Write-Warning "Unable to find artifact for test project $($_.BaseName)" + } +} diff --git a/test_projects/jekyll-include-cache/_expected/index.html b/test_projects/jekyll-include-cache/_expected/index.html index 9f2af89..91f256a 100644 --- a/test_projects/jekyll-include-cache/_expected/index.html +++ b/test_projects/jekyll-include-cache/_expected/index.html @@ -6,10 +6,12 @@ -jekyll-build-pages +jekyll-build-pages | A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages. + + @@ -17,7 +19,7 @@ +{"@context":"https://schema.org","@type":"WebSite","description":"A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.","headline":"jekyll-build-pages","name":"jekyll-build-pages","url":"https://github.com/pages/actions/jekyll-build-pages/"} diff --git a/test_projects/mojombo/Gemfile.lock b/test_projects/mojombo/Gemfile.lock index ebac303..ee7f0f3 100644 --- a/test_projects/mojombo/Gemfile.lock +++ b/test_projects/mojombo/Gemfile.lock @@ -128,10 +128,10 @@ GEM faraday (~> 0.8, < 0.10) terminal-table (1.7.3) unicode-display_width (~> 1.1.1) - thread_safe (0.3.5) + thread_safe (0.3.6) typhoeus (0.8.0) ethon (>= 0.8.0) - tzinfo (1.2.2) + tzinfo (1.2.10) thread_safe (~> 0.1) unicode-display_width (1.1.1) diff --git a/test_projects/octicons/_expected/index.html b/test_projects/octicons/_expected/index.html index 4ba3b74..aa68d57 100644 --- a/test_projects/octicons/_expected/index.html +++ b/test_projects/octicons/_expected/index.html @@ -10,6 +10,8 @@ + + @@ -17,7 +19,7 @@ +{"@context":"https://schema.org","@type":"WebSite","description":"A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.","headline":"Readme Test","name":"jekyll-build-pages","url":"https://github.com/pages/actions/jekyll-build-pages/"} diff --git a/test_projects/readme/_expected/index.html b/test_projects/readme/_expected/index.html index 4397b96..c346db8 100644 --- a/test_projects/readme/_expected/index.html +++ b/test_projects/readme/_expected/index.html @@ -10,6 +10,8 @@ + + @@ -17,7 +19,7 @@ +{"@context":"https://schema.org","@type":"WebSite","description":"A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.","headline":"Readme Test","name":"jekyll-build-pages","url":"https://github.com/pages/actions/jekyll-build-pages/"} diff --git a/test_projects/simple/_expected/index.html b/test_projects/simple/_expected/index.html index aecb01d..4d34bbc 100644 --- a/test_projects/simple/_expected/index.html +++ b/test_projects/simple/_expected/index.html @@ -6,10 +6,12 @@ -Jekyll Actions Demo +Jekyll Actions Demo | A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages. + + @@ -17,7 +19,7 @@ +{"@context":"https://schema.org","@type":"WebSite","description":"A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.","headline":"Jekyll Actions Demo","name":"Jekyll Actions Demo","url":"https://github.com/pages/actions/jekyll-build-pages/"} diff --git a/test_projects/themes/_expected/index.html b/test_projects/themes/_expected/index.html index 340bc65..9d007d6 100644 --- a/test_projects/themes/_expected/index.html +++ b/test_projects/themes/_expected/index.html @@ -6,10 +6,12 @@ -themes +themes | A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages. + + @@ -17,7 +19,7 @@ +{"@context":"https://schema.org","@type":"WebSite","description":"A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.","headline":"themes","name":"themes","url":"https://github.com/pages/actions/jekyll-build-pages/"} @@ -43,7 +45,7 @@

themes

+

A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.

View the Project on GitHub actions/jekyll-build-pages