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 @@ -
A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.