From 37ece2b4adef77096ffcbca25244220d1c007427 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sat, 22 Jun 2024 10:19:19 +0200 Subject: [PATCH] Refactored update platform determination --- .github/workflows/build-and-release.yml | 99 +++++++++++-------------- 1 file changed, 44 insertions(+), 55 deletions(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 6c67ce5a..7ca8501f 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -16,35 +16,30 @@ jobs: include: - platform: 'macos-latest' # for ARM-based macOS (M1 and above) rust_target: 'aarch64-apple-darwin' - update_platform: 'darwin-aarch64' dotnet_runtime: 'osx-arm64' dotnet_name_postfix: '-aarch64-apple-darwin' tauri_bundle: 'dmg updater' - platform: 'macos-latest' # for Intel-based macOS rust_target: 'x86_64-apple-darwin' - update_platform: 'darwin-x86_64' dotnet_runtime: 'osx-x64' dotnet_name_postfix: '-x86_64-apple-darwin' tauri_bundle: 'dmg updater' - platform: 'ubuntu-22.04' # for x86-based Linux rust_target: 'x86_64-unknown-linux-gnu' - update_platform: 'linux-x86_64' dotnet_runtime: 'linux-x64' dotnet_name_postfix: '-x86_64-unknown-linux-gnu' tauri_bundle: 'appimage deb updater' - platform: 'windows-latest' # for x86-based Windows rust_target: 'x86_64-pc-windows-msvc' - update_platform: 'windows-x86_64' dotnet_runtime: 'win-x64' dotnet_name_postfix: '-x86_64-pc-windows-msvc.exe' tauri_bundle: 'nsis updater' - platform: 'windows-latest' # for ARM-based Windows rust_target: 'aarch64-pc-windows-msvc' - update_platform: 'windows-aarch64' dotnet_runtime: 'win-arm64' dotnet_name_postfix: '-aarch64-pc-windows-msvc.exe' tauri_bundle: 'nsis updater' @@ -159,14 +154,6 @@ jobs: Write-Output "Rust version: '${rust_version}'" Write-Output "MudBlazor version: '${mud_blazor_version}'" Write-Output "Tauri version: '${tauri_version}'" - - - name: Store update platform to .updates directory (Unix) - if: matrix.platform != 'windows-latest' - run: echo ${{ matrix.update_platform }} > .updates/platform - - - name: Store update platform to .updates directory (Windows) - if: matrix.platform == 'windows-latest' - run: Write-Output "${{ matrix.update_platform }}" | Out-File -FilePath ".updates/platform" -Encoding utf8 -NoNewline - name: Setup .NET uses: actions/setup-dotnet@v4 @@ -289,7 +276,6 @@ jobs: path: | runtime/target/${{ matrix.rust_target }}/release/bundle/dmg/MindWork AI Studio_*.dmg runtime/target/${{ matrix.rust_target }}/release/bundle/macos/MindWork AI Studio.app.tar.gz* - .updates/platform if-no-files-found: error retention-days: ${{ env.RETENTION_INTERMEDIATE_ASSETS }} @@ -301,7 +287,6 @@ jobs: path: | runtime/target/${{ matrix.rust_target }}/release/bundle/msi/MindWork AI Studio_*.msi runtime/target/${{ matrix.rust_target }}/release/bundle/msi/MindWork AI Studio*msi.zip* - .updates/platform if-no-files-found: error retention-days: ${{ env.RETENTION_INTERMEDIATE_ASSETS }} @@ -313,7 +298,6 @@ jobs: path: | runtime/target/${{ matrix.rust_target }}/release/bundle/nsis/MindWork AI Studio_*.exe runtime/target/${{ matrix.rust_target }}/release/bundle/nsis/MindWork AI Studio*nsis.zip* - .updates/platform if-no-files-found: error retention-days: ${{ env.RETENTION_INTERMEDIATE_ASSETS }} @@ -324,7 +308,6 @@ jobs: name: MindWork AI Studio (Linux - deb ${{ matrix.dotnet_runtime }}) path: | runtime/target/${{ matrix.rust_target }}/release/bundle/deb/mind-work-ai-studio_*.deb - .updates/platform if-no-files-found: error retention-days: ${{ env.RETENTION_INTERMEDIATE_ASSETS }} @@ -336,7 +319,6 @@ jobs: path: | runtime/target/${{ matrix.rust_target }}/release/bundle/appimage/mind-work-ai-studio_*.AppImage runtime/target/${{ matrix.rust_target }}/release/bundle/appimage/mind-work-ai-studio*AppImage.tar.gz* - .updates/platform if-no-files-found: error retention-days: ${{ env.RETENTION_INTERMEDIATE_ASSETS }} @@ -403,9 +385,6 @@ jobs: echo "Rust version: '${rust_version}'" echo "MudBlazor version: '${mud_blazor_version}'" echo "Tauri version: '${tauri_version}'" - - - name: Store update platform to .updates directory - run: echo "linux-aarch64" > .updates/platform - name: Setup .NET uses: actions/setup-dotnet@v4 @@ -539,7 +518,6 @@ jobs: name: MindWork AI Studio (Linux - deb linux-arm64) path: | result/target/aarch64-unknown-linux-gnu/release/bundle/deb/mind-work-ai-studio_*.deb - .updates/platform if-no-files-found: warn retention-days: ${{ env.RETENTION_INTERMEDIATE_ASSETS }} @@ -668,41 +646,52 @@ jobs: echo "Processing signature file '$sig_file':" - # Extract the platform directory. First, we start at the location of the signature file: - platform_dir=$(dirname "$sig_file") - - # Iterate up the directory tree until we find the platform file. - # When we reach the artifacts directory, we stop. - while [[ "$platform_dir" != "$GITHUB_WORKSPACE/artifacts" ]]; do - if [[ -f "$platform_dir/.updates/platform" ]]; then - echo " Found platform file in '$platform_dir/.updates/platform' for signature file '$sig_file'." - break - fi - - # Go up one directory level: - platform_dir=$(dirname "$platform_dir") - echo " Going up to '$platform_dir'." - done - - # Ensure that we found the platform file: - if [[ -f "$platform_dir/.updates/platform" ]]; then - - # Read the platform and signature: - platform=$(cat "$platform_dir/.updates/platform") - signature=$(cat "$sig_file") - - # Extract the artifact name and create the URL: - artifact_name=$(basename "$sig_file" .sig) - encoded_artifact_name=$(urlencode "$artifact_name") - url="https://github.com/MindWorkAI/AI-Studio/releases/download/$FORMATTED_VERSION/$encoded_artifact_name" - - # Build the JSON object: - platforms_json=$(echo "$platforms_json" | jq --arg platform "$platform" --arg signature "$signature" --arg url "$url" '.[$platform] = {"signature": $signature, "url": $url}') - + # + # Next, we determine the "update platform". We use a if/elseif construct. + # We store the result in the $platform variable. + # + # We derive the platform from the path and the signature file name: + # - platform=darwin-aarch64 when path contains 'aarch64-apple-darwin' + # - platform=darwin-x86_64 when path contains 'x86_64-apple-darwin' + # - platform=linux-x86_64 when path contains 'x86_64-unknown-linux-' + # - platform=windows-x86_64 when path contains 'x86_64-pc-windows-' + # - platform=windows-aarch64 when path contains 'aarch64-pc-windows-' + # + if [[ "$sig_file" == *"aarch64-apple-darwin"* ]]; then + platform="darwin-aarch64" + elif [[ "$sig_file" == *"x86_64-apple-darwin"* ]]; then + platform="darwin-x86_64" + elif [[ "$sig_file" == *"x86_64-unknown-linux-" ]]; then + platform="linux-x86_64" + elif [[ "$sig_file" == *"x86_64-pc-windows-" ]]; then + platform="windows-x86_64" + elif [[ "$sig_file" == *"aarch64-pc-windows-" ]]; then + platform="windows-aarch64" else - echo " Error: Could not find the platform file for the signature file '$sig_file'." + echo "Platform not recognized: '$sig_file'" + exit 1 fi - done < <(find $GITHUB_WORKSPACE/artifacts -type f -name '*.sig' -print0) + + # Read the signature: + signature=$(cat "$sig_file") + + # Extract the artifact name and create the URL: + artifact_name=$(basename "$sig_file" .sig) + encoded_artifact_name=$(urlencode "$artifact_name") + url=" + + # Read the signature: + signature=$(cat "$sig_file") + + # Extract the artifact name and create the URL: + artifact_name=$(basename "$sig_file" .sig) + encoded_artifact_name=$(urlencode "$artifact_name") + url="https://github.com/MindWorkAI/AI-Studio/releases/download/$FORMATTED_VERSION/$encoded_artifact_name" + + # Build the JSON object: + platforms_json=$(echo "$platforms_json" | jq --arg platform "$platform" --arg signature "$signature" --arg url "$url" '.[$platform] = {"signature": $signature, "url": $url}') + + done < <(find $GITHUB_WORKSPACE/release/assets -type f -name '*.sig' -print0) # Write the JSON object to a temporary file: echo "$platforms_json" > $GITHUB_WORKSPACE/.updates/platforms.json