From d9d253201f943e5b6492524f3c77d7411cf0b5d6 Mon Sep 17 00:00:00 2001 From: Yoann Chaudet Date: Wed, 27 Jul 2022 13:15:40 -0700 Subject: [PATCH] wip --- bin/record_expected_output | 16 +++--- bin/sync_expected_output.ps1 | 103 +++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 8 deletions(-) create mode 100755 bin/sync_expected_output.ps1 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..8aa82f3 --- /dev/null +++ b/bin/sync_expected_output.ps1 @@ -0,0 +1,103 @@ +#!/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 100 --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 } + + +# TEMP +$tempFolder = '/var/folders/0p/xh302z2x64b64_4l9xc5n7bm0000gn/T/959ec25f-986e-48b1-b6a8-155cd7ba62fe' + +Write-Host $tempFolder +$runId = 2748946582 + +# 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 $artifactPath -Destination $destinationPath -Recurse | Out-Null + } + + # Ignore test project + else { + Write-Warning "Unable to find artifact for test project $($_.BaseName)" + } +}