Prepared 1.3.1 #71
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Windows | |
| on: | |
| push: | |
| branches: | |
| - 'main' | |
| - 'release/**' | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version to build (e.g. 1.2.3 or v1.2.3)' | |
| required: true | |
| default: 'vX.Y.Z' | |
| type: string | |
| env: | |
| BUILD_TYPE: Release | |
| BUILD_DIR: build/clang_release | |
| jobs: | |
| windows-msys2: | |
| runs-on: windows-latest | |
| defaults: | |
| run: | |
| shell: msys2 {0} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: msys2/setup-msys2@v2 | |
| with: | |
| path-type: inherit | |
| msystem: clang64 | |
| release: true | |
| install: >- | |
| make | |
| libcurl | |
| unzip | |
| git | |
| zip | |
| mingw-w64-clang-x86_64-clang | |
| mingw-w64-clang-x86_64-cmake | |
| mingw-w64-clang-x86_64-boost | |
| mingw-w64-clang-x86_64-crypto++ | |
| mingw-w64-clang-x86_64-ninja | |
| mingw-w64-clang-x86_64-python | |
| mingw-w64-clang-x86_64-pugixml | |
| mingw-w64-clang-x86_64-fmt | |
| mingw-w64-clang-x86_64-libssh | |
| mingw-w64-clang-x86_64-cppwinrt | |
| mingw-w64-clang-x86_64-zlib | |
| mingw-w64-clang-x86_64-bzip2 | |
| mingw-w64-clang-x86_64-zstd | |
| mingw-w64-clang-x86_64-xz | |
| mingw-w64-clang-x86_64-imagemagick | |
| mingw-w64-clang-x86_64-librsvg | |
| - name: Workspace Path Fixup | |
| run: | | |
| echo "WSPACE=$(cygpath '${{ github.workspace }}')" >> "$GITHUB_ENV" | |
| - name: Extract version from PKGBUILD | |
| if: github.event_name != 'workflow_dispatch' | |
| run: | | |
| VERSION=$(./scripts/extract_version.sh) | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| - name: Dispatch version to environment | |
| if: github.event_name == 'workflow_dispatch' | |
| run: | | |
| echo "VERSION=${{ github.event.inputs.version }}" >> "$GITHUB_ENV" | |
| - uses: actions/setup-node@v6 | |
| with: | |
| node-version: 24 | |
| - name: Test node | |
| run: node --version && whereis node | |
| - uses: actions/checkout@v6 | |
| with: | |
| repository: 5cript/nui-sftp | |
| path: nui-sftp | |
| fetch-tags: true | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Configure CMake | |
| run: | | |
| cmake \ | |
| -B "${{ env.WSPACE }}/nui-sftp/${{ env.BUILD_DIR }}" \ | |
| -S "${{ env.WSPACE }}/nui-sftp" \ | |
| -G Ninja \ | |
| -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
| -DFORCED_PROJECT_VERSION=${{ env.VERSION }} \ | |
| -DCMAKE_C_COMPILER=clang \ | |
| -DCMAKE_CXX_COMPILER=clang++ \ | |
| -DCMAKE_LINKER=lld \ | |
| -DCMAKE_CXX_EXTENSIONS=on \ | |
| -DNUI_ENABLE_TESTS=off \ | |
| -DNUI_BUILD_EXAMPLES=off \ | |
| -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ | |
| -DCMAKE_CXX_STANDARD=23 \ | |
| -DJSON_Diagnostics=ON \ | |
| -DNUI_FETCH_TRAITS=OFF \ | |
| -DNUI_BUILD_XML_TOOL=ON \ | |
| - name: Build | |
| run: | | |
| cmake --build \ | |
| "${{ env.WSPACE }}/nui-sftp/${{ env.BUILD_DIR }}" \ | |
| --config "${{ env.BUILD_TYPE }}" | |
| - name: Download and extract icons | |
| run: | | |
| ICONS_DIR="${{ env.WSPACE }}/nui-sftp/dependencies/icons" | |
| mkdir -p "$ICONS_DIR" | |
| curl -L "https://s3.g.s4.mega.io/jgemkib4a5fte35rktt5wxrwkw4ejk4ybemkf/nui-scp/icons.tar.gz" -o "$ICONS_DIR/icons.tar.gz" | |
| tar -xzf "$ICONS_DIR/icons.tar.gz" -C "$ICONS_DIR" --strip-components=0 | |
| rm "$ICONS_DIR/icons.tar.gz" | |
| # Output lands in ${{ env.WSPACE }}/nui-sftp/build/install | |
| - name: Run deploy script | |
| env: | |
| BUILD_DIR: ${{ env.WSPACE }}/nui-sftp/${{ env.BUILD_DIR }} | |
| ICONS_SOURCE: ${{ env.WSPACE }}/nui-sftp/dependencies/icons | |
| run: | | |
| cd "${{ env.WSPACE }}/nui-sftp" && bash scripts/deploy.sh | |
| - name: Zip deployed files | |
| run: | | |
| cp -r "${{ env.WSPACE }}/nui-sftp/build/install" "${{ env.WSPACE }}/nui-sftp/build/nui-sftp" | |
| cd "${{ env.WSPACE }}/nui-sftp/build" && \ | |
| zip -r "nui-sftp-windows-x86_64_${{ env.VERSION }}.zip" "nui-sftp" | |
| mv "nui-sftp-windows-x86_64_${{ env.VERSION }}.zip" "${{ env.WSPACE }}" | |
| - name: Install Inno Setup | |
| run: choco install innosetup -y --no-progress | |
| - name: Build installer | |
| env: | |
| SOURCE_DIR: ${{ env.WSPACE }}/nui-sftp/build/install | |
| OUTPUT_DIR: ${{ env.WSPACE }}/installer-out | |
| run: | | |
| bash scripts/build_installer.sh \ | |
| --version "${{ env.VERSION }}" \ | |
| --source-dir "$SOURCE_DIR" \ | |
| --output-dir "$OUTPUT_DIR" | |
| mv "$OUTPUT_DIR/nui-sftp-windows-x86_64_${{ env.VERSION }}-setup.exe" "${{ env.WSPACE }}/" | |
| - name: Produce Zip Artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: nui-sftp-windows-x86_64_${{ env.VERSION }}.zip | |
| path: ${{ env.WSPACE }}/nui-sftp-windows-x86_64_${{ env.VERSION }}.zip | |
| - name: Produce Installer Artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: nui-sftp-windows-x86_64_${{ env.VERSION }}-setup.exe | |
| path: ${{ env.WSPACE }}/nui-sftp-windows-x86_64_${{ env.VERSION }}-setup.exe | |
| - name: Upload Artifacts to Release | |
| if: github.ref == 'refs/heads/main' | |
| env: | |
| GH_TOKEN: ${{ secrets.RELEASEUPLOADPAT }} | |
| run: | | |
| gh release upload "v${{ env.VERSION }}" "${{ env.WSPACE }}/nui-sftp-windows-x86_64_${{ env.VERSION }}.zip" --repo 5cript/nui-sftp | |
| gh release upload "v${{ env.VERSION }}" "${{ env.WSPACE }}/nui-sftp-windows-x86_64_${{ env.VERSION }}-setup.exe" --repo 5cript/nui-sftp | |
| - name: Upload artifacts to MEGA S4 | |
| if: github.ref == 'refs/heads/main' || github.event_name == 'workflow_dispatch' | |
| env: | |
| AWS_ACCESS_KEY_ID: ${{ secrets.MEGAS4ACCESS }} | |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.MEGAS4KEY }} | |
| ENDPOINT: https://s3.eu-central-1.s4.mega.io | |
| ZIP_FILENAME: "nui-sftp-windows-x86_64_${{ env.VERSION }}.zip" | |
| SETUP_FILENAME: "nui-sftp-windows-x86_64_${{ env.VERSION }}-setup.exe" | |
| S3_PATH: "s3://nui-sftp-releases/windows/${{ (github.event_name == 'workflow_dispatch' && 'x86_64/user_trigger') || 'x86_64' }}/" | |
| run: | | |
| upload_if_absent() { | |
| local filename="$1" | |
| if aws s3 ls "${{ env.S3_PATH }}${filename}" --endpoint-url "${{ env.ENDPOINT }}" > /dev/null 2>&1; then | |
| echo "Error: File ${filename} already exists in S4. Aborting to prevent overwrite." | |
| exit 1 | |
| fi | |
| aws s3 cp "${{ env.WSPACE }}/${filename}" "${{ env.S3_PATH }}" --endpoint-url "${{ env.ENDPOINT }}" | |
| } | |
| upload_if_absent "${{ env.ZIP_FILENAME }}" | |
| upload_if_absent "${{ env.SETUP_FILENAME }}" |