Skip to content

Merge pull request #26 from 5cript/release/1.2.0 #67

Merge pull request #26 from 5cript/release/1.2.0

Merge pull request #26 from 5cript/release/1.2.0 #67

Workflow file for this run

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 }}"