Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 62 additions & 19 deletions .github/workflows/windows-build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,64 @@ jobs:
runs-on: windows-2022
env:
CRAFT_TARGET: windows-msvc2022_64-cl
COBERTURA_COVERAGE_FILE: ${{ github.workspace }}\cobertura_coverage\coverage.xml
CRAFT_MASTER_LOCATION: ${{ github.workspace }}\CraftMaster
CRAFT_MASTER_CONFIG: ${{ github.workspace }}\craftmaster.ini
PYTHON_VERSION: '3.12'
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
fetch-depth: 1

- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.12'
python-version: ${{ env.PYTHON_VERSION }}

- name: Resolve Craft dependency revisions
id: craft-revisions
shell: pwsh
run: |
function configValue($key) {
$escapedKey = [regex]::Escape($key)
$matches = @(Select-String -Path "${{ env.CRAFT_MASTER_CONFIG }}" -Pattern "^\s*$escapedKey\s*=\s*(.+?)\s*$")
if($matches.Count -ne 1) {
throw "Expected exactly one $key value in craftmaster.ini."
}
return $matches[0].Matches[0].Groups[1].Value.Trim()
}

$craftRevision = configValue "CraftRevision"
$kdeBlueprintRef = configValue "craft/craft-blueprints-kde.revision"
$nextcloudBlueprintRef = configValue "craft/craft-blueprints-nextcloud.revision"

function remoteRevision($repository, $ref) {
$revision = git ls-remote $repository $ref
if($LASTEXITCODE -ne 0 -or !$revision) {
throw "Could not resolve $ref from $repository."
}
return ($revision -split '\s+')[0]
}

$kdeBlueprintRevision = remoteRevision "https://github.com/nextcloud/craft-blueprints-kde.git" "refs/heads/$kdeBlueprintRef"
$nextcloudBlueprintRevision = remoteRevision "https://github.com/nextcloud/craft-blueprints-nextcloud.git" "refs/heads/$nextcloudBlueprintRef"
@(
"kde_ref=$kdeBlueprintRef"
"nextcloud_ref=$nextcloudBlueprintRef"
"key=$craftRevision-$kdeBlueprintRevision-$nextcloudBlueprintRevision"
) | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append

- name: Restore Craft dependencies
Comment thread
Rello marked this conversation as resolved.
id: craft-cache
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
${{ env.CRAFT_MASTER_LOCATION }}
${{ env.CRAFT_MASTER_CONFIG }}
${{ github.workspace }}\craft-clone
${{ github.workspace }}\${{ env.CRAFT_TARGET }}
key: ${{ runner.os }}-craft-v1-${{ env.CRAFT_TARGET }}-python-${{ env.PYTHON_VERSION }}-${{ steps.craft-revisions.outputs.key }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Hash every cached Craft input

In this Windows pull-request workflow, the key covers only CraftRevision and the two blueprint branch tips, while the cache also restores the complete craftmaster.ini and a CraftMaster checkout cloned from its independently moving HEAD. If a later push to the same PR changes an unkeyed setting such as libs/qt6.version, libs/openssl.version, or another build option—or CraftMaster alone advances—the existing immutable cache is hit, the old configuration is restored over the checkout, and dependency installation is skipped, so CI builds against stale inputs. Include the full configuration hash and the resolved CraftMaster revision in the key, and avoid restoring the checked-in configuration itself.

Useful? React with 👍 / 👎.


- name: Install Craft Master with Nextcloud Client Deps
if: steps.craft-cache.outputs.cache-hit != 'true'
shell: pwsh
run: |
& cmd /C "git clone -q --depth=1 https://invent.kde.org/packaging/craftmaster.git ${{ env.CRAFT_MASTER_LOCATION }} 2>&1"
Expand All @@ -32,23 +78,21 @@ jobs:
if($LASTEXITCODE -ne 0) {exit $LASTEXITCODE}
}

craft --add-blueprint-repository "https://github.com/nextcloud/craft-blueprints-kde.git|stable-34.0|"
craft --add-blueprint-repository "https://github.com/nextcloud/craft-blueprints-nextcloud.git|stable-34.0|"
craft --add-blueprint-repository "https://github.com/nextcloud/craft-blueprints-kde.git|${{ steps.craft-revisions.outputs.kde_ref }}|"
craft --add-blueprint-repository "https://github.com/nextcloud/craft-blueprints-nextcloud.git|${{ steps.craft-revisions.outputs.nextcloud_ref }}|"
craft craft
craft --install-deps nextcloud-client
- name: Cache Install OpenCppCoverage
id: cache-install-opencppcoverage
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0

- name: Save Craft dependencies
if: steps.craft-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: C:\Program Files\OpenCppCoverage
key: ${{ runner.os }}-cache-install-opencppcoverage

- name: Install OpenCppCoverage
if: steps.cache-install-opencppcoverage.outputs.cache-hit != 'true'
shell: pwsh
run: |
choco install opencppcoverage
path: |
${{ env.CRAFT_MASTER_LOCATION }}
${{ env.CRAFT_MASTER_CONFIG }}
${{ github.workspace }}\craft-clone
${{ github.workspace }}\${{ env.CRAFT_TARGET }}
key: ${{ runner.os }}-craft-v1-${{ env.CRAFT_TARGET }}-python-${{ env.PYTHON_VERSION }}-${{ steps.craft-revisions.outputs.key }}

#- name: Cache Install inkscape
# id: cache-install-inkscape
Expand All @@ -66,7 +110,6 @@ jobs:
- name: Setup PATH
shell: pwsh
run: |
echo "C:\Program Files\OpenCppCoverage" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
echo "${{ github.workspace }}\${{ env.CRAFT_TARGET }}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

- name: Compile
Expand All @@ -79,7 +122,7 @@ jobs:

craft --src-dir ${{ github.workspace }} nextcloud-client

- name: Run tests with coverage
- name: Run tests
shell: pwsh
run: |
function runTests() {
Expand Down
Loading