Files

Flutter Build Windows

Composite action to build Windows Flutter desktop applications, compile Inno Setup (.exe) and MSIX (.msix) installers, sign updates with WinSparkle DSA keys, and generate release metadata.

Inputs

Name Description Required Default
working_directory Path to the Flutter app package directory. No .
arch Target Windows architecture (x64 or arm64). No x64
build_args Extra arguments passed to flutter build windows. No ''
build_inno_setup Whether to compile an Inno Setup installer (.exe). No true
inno_setup_script Path to Inno Setup .iss script relative to working_directory. No windows/installer/inno_setup.iss
output_dir Output directory for compiled Inno Setup installer. No dist
exe_filename Expected installer filename for metadata JSON. No ''
build_msix Whether to build an MSIX package using msix:create. No true
msix_output_name Output base name for the MSIX package. No ''
pfx_base64 Base64-encoded Windows Authenticode .pfx certificate. No ''
pfx_password Password for the Windows .pfx certificate. No ''
sparkle_dsa_private_key WinSparkle DSA private key content (PEM) for signing installer. No ''
sparkle_dsa_key_file Fallback path to WinSparkle DSA private key file in repository. No signing/sparkle/dsa_priv.pem
generate_metadata_json Whether to generate windows_<arch>_metadata.json and windows_signature.txt. No false

Outputs

Name Description
version Resolved package version from pubspec.yaml.
exe_path Path to compiled Inno Setup .exe installer.
msix_path Path to generated .msix installer.
signature WinSparkle DSA signature if generated.
metadata_path Path to generated windows_<arch>_metadata.json.

Example Usage

- name: Build & Package Windows Release
  uses: rodydavis/shared-actions/flutter-build-windows@main
  with:
    working_directory: packages/sfw_desktop
    arch: ${{ matrix.arch }}
    build_args: --dart-define=API_BASE_URL=https://slidesforworship.app
    msix_output_name: slides_for_worship_${{ matrix.arch }}
    pfx_base64: ${{ secrets.WINDOWS_PFX_BASE64 }}
    pfx_password: ${{ secrets.WINDOWS_PFX_PASSWORD }}
    sparkle_dsa_private_key: ${{ secrets.SPARKLE_DSA_PRIVATE_KEY }}
    generate_metadata_json: 'true'