├── .github └── workflows │ ├── BuildAndroid.yml │ ├── BuildPipelineNew.yml │ ├── BuildPipelineUV.yml │ ├── __BuildPipeline.yml_OFF │ ├── __aubio.yml_OFF │ ├── __tool.yml_OFF │ └── test_android.yml ├── .gitignore ├── LICENSE ├── README.md ├── dev.bat ├── init.bat ├── install.bat └── tools ├── Readme.md ├── cors.patch ├── linux └── yzlinux.spec ├── mac ├── aubio-0.4.9-cp39-cp39-macosx_10_9_x86_64.whl ├── aubio-0.5.0a0-cp39-cp39-macosx_10_9_x86_64.whl ├── libsamplerate-arm64.dylib ├── libsamplerate-x86-x64.dylib ├── mac-arm64.spec ├── mac.spec ├── numpy-1.23.3-cp39-cp39-macosx_10_9_x86_64.whl └── selfhosted.py ├── sentry.patch ├── sentry_android.patch └── win ├── aubio-0.5.0a0-cp310-cp310-win_amd64.whl ├── aubio-0.5.0a0-cp312-cp312-win_amd64.whl ├── aubio-0.5.0a0-cp39-cp39-win_amd64.whl ├── hook-samplerate.py ├── install-yarn.bat ├── libportaudio64bit.dll ├── libsamplerate-32bit.dll ├── libsamplerate-64bit.dll ├── numpy-1.22.4+vanilla-cp310-cp310-win_amd64.whl ├── req.txt ├── version-bump.ps1 ├── version-bump2.ps1 ├── win-gh.spec ├── win-ghyz.spec ├── win.spec └── yzwin.spec /.github/workflows/BuildAndroid.yml: -------------------------------------------------------------------------------- 1 | name: LedFx BuildPipeline Android 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | fversion: 7 | description: 'Frontend Version' 8 | default: '106' 9 | required: false 10 | upload_url: 11 | description: 'Upload URL for release' 12 | required: false 13 | release: 14 | description: 'Create Release' 15 | default: 'Yes' 16 | required: false 17 | type: choice 18 | options: 19 | - 'Yes' 20 | - 'No' 21 | jobs: 22 | build: 23 | runs-on: ubuntu-22.04 24 | steps: 25 | - name: Checkout Android Builder 26 | uses: actions/checkout@v4 27 | with: 28 | repository: broccoliboy/ledfx-android 29 | - name: Checkout LedFx 30 | uses: actions/checkout@v4 31 | with: 32 | repository: ledfx/LedFx 33 | path: deps/ledfx 34 | - name: Checkout frontend 35 | uses: actions/checkout@v4 36 | with: 37 | repository: YeonV/LedFx-Frontend-v2 38 | token: ${{ secrets.GITHUB_TOKEN }} 39 | ref: main 40 | path: src3 41 | - name: Check out tools from GitHub 42 | uses: actions/checkout@v4 43 | with: 44 | repository: YeonV/LedFx-Builds 45 | token: ${{ secrets.GITHUB_TOKEN }} 46 | ref: main 47 | path: src2 48 | 49 | - name: Delete old frontend 50 | uses: JesseTG/rm@2fb8f3b8a0e41fc222e7943b63306c602feb187e 51 | with: 52 | path: ./deps/ledfx/ledfx_frontend 53 | 54 | - name: apply patches 55 | run: | 56 | cp ./src2/tools/cors.patch ./deps/ledfx/cors.patch 57 | cp ./src2/tools/sentry.patch ./deps/ledfx/sentry.patch 58 | cp ./src2/tools/sentry_android.patch ./sentry_android.patch 59 | git apply sentry_android.patch 60 | cd ./deps/ledfx 61 | git apply cors.patch 62 | git apply sentry.patch 63 | cd .. 64 | cd .. 65 | 66 | - name: Prepare version Bump for Android 67 | id: prepare_version 68 | run: | 69 | raw_fversion="${{ github.event.inputs.fversion }}" # e.g., "109-b20" 70 | patch_base=$(echo "$raw_fversion" | cut -d'-' -f1) # Extracts "109" 71 | beta_number_full=$(echo "$raw_fversion" | cut -d'-' -f2) # Extracts "b20" 72 | beta_number=$(echo "$beta_number_full" | sed 's/b//') # Extracts "20" 73 | padded_beta_number=$(printf "%03d" "$beta_number") 74 | 75 | android_numeric_patch_part="${patch_base}${padded_beta_number}" # "109" + "020" = "109020" 76 | 77 | echo "android_fversion_for_consts=$android_numeric_patch_part" >> $GITHUB_OUTPUT 78 | 79 | - name: Bump version to ${{ github.event.inputs.fversion }} 80 | continue-on-error: true 81 | run: | 82 | sed -i '0,/PROJECT_VERSION = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//PROJECT_VERSION = "\1.\2.${{ steps.prepare_version.outputs.android_fversion_for_consts }}"/' ./deps/ledfx/ledfx/consts.py 83 | new_version=$(sed -n 's/.*PROJECT_VERSION = "\([0-9]*\.[0-9]*\.[0-9]*\(-[a-z0-9]*\)*\)".*/\1/p' ./deps/ledfx/ledfx/consts.py) 84 | echo "action_state=$new_version" >> $GITHUB_ENV 85 | 86 | # - name: Get latest frontend 87 | # run: | 88 | # curl -L --max-redirs 10 -o ledfx_frontend_android.zip "https://github.com/YeonV/LedFx-Frontend-v2/releases/latest/download/ledfx_frontend_android.zip" 89 | 90 | # - name: Include new frontend 91 | # run: | 92 | # unzip -o -u ledfx_frontend_android.zip 93 | # cp -rf ./ledfx_frontend_android ./deps/ledfx/ledfx_frontend 94 | # ls ./deps/ledfx/ledfx_frontend 95 | 96 | - name: Set up Node.js 97 | uses: actions/setup-node@v4 98 | with: 99 | node-version: 20 100 | cache: 'yarn' 101 | cache-dependency-path: '**/yarn.lock' 102 | 103 | - name: Build frontend 104 | run: | 105 | cd src3 106 | yarn 107 | yarn buildandroid 108 | cd .. 109 | 110 | - name: Include new build frontend 111 | run: | 112 | cp -r ./src3/build ./deps/ledfx/ledfx_frontend 113 | ls ./deps/ledfx/ledfx_frontend 114 | 115 | - name: Setup python 116 | uses: actions/setup-python@v5 117 | with: 118 | architecture: x64 119 | python-version: 3.12 120 | 121 | - name: Setup Java 17 required by Gradle 122 | uses: actions/setup-java@v4 123 | with: 124 | distribution: 'temurin' 125 | java-version: '17' 126 | 127 | - name: Set JAVA_HOME 128 | run: | 129 | echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV 130 | 131 | - name: Prepare virtual environment 132 | run: | 133 | python3 -m venv venv 134 | source venv/bin/activate 135 | echo "Using Python==$(python --version)" 136 | 137 | - name: Install and upgrade dependencies 138 | run: | 139 | sudo apt update 140 | sudo apt install -y \ 141 | git \ 142 | zip \ 143 | unzip \ 144 | openjdk-17-jdk \ 145 | python3-pip \ 146 | autoconf \ 147 | automake \ 148 | libtool \ 149 | pkg-config \ 150 | zlib1g-dev \ 151 | libncurses5-dev \ 152 | libncursesw5-dev \ 153 | libtinfo5 \ 154 | cmake \ 155 | libffi-dev \ 156 | libssl-dev 157 | export PATH=$PATH:~/.local/bin/ 158 | python3 -m pip install --upgrade pip 159 | python3 -m pip install --upgrade git+https://github.com/kivy/buildozer 160 | 161 | - name: Build with Buildozer 162 | run: buildozer android debug 163 | 164 | - name: Upload artifacts 165 | uses: actions/upload-artifact@v4 166 | with: 167 | name: package 168 | path: ./bin/*.apk 169 | 170 | release: 171 | if: ${{ github.event.inputs.release == 'Yes' || github.event.inputs.release == 'yes' }} 172 | runs-on: ubuntu-22.04 173 | needs: build 174 | permissions: 175 | contents: write 176 | steps: 177 | - name: Download artifacts 178 | uses: actions/download-artifact@v4 179 | with: 180 | name: package 181 | path: ./bin 182 | - name: List Files 183 | run: ls -la ./bin 184 | - name: copy filename of apk to env 185 | run: | 186 | apk_file=$(ls ./bin/*.apk) 187 | echo "APK_FILE=$apk_file" >> $GITHUB_ENV 188 | echo "APK_FILE=${{ env.APK_FILE }}" 189 | - name: Upload To Release 190 | uses: YeonV/upload-release-asset@v1 191 | env: 192 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 193 | with: 194 | upload_url: ${{ github.event.inputs.upload_url }} 195 | asset_path: ${{ env.APK_FILE }} 196 | asset_name: LedFx_Android-2.0.${{ github.event.inputs.fversion }}.apk 197 | asset_content_type: application/vnd.android.package-archive -------------------------------------------------------------------------------- /.github/workflows/BuildPipelineNew.yml: -------------------------------------------------------------------------------- 1 | name: BuildPipeline Old (<=2.0.105) 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | fversion: 7 | description: 'Frontend Version' 8 | default: '87' 9 | required: false 10 | portaudio: 11 | description: 'Build Portaudio' 12 | default: 'No' 13 | required: false 14 | type: choice 15 | options: 16 | - 'Yes' 17 | - 'No' 18 | release: 19 | description: 'Create Release' 20 | default: 'Yes' 21 | required: false 22 | type: choice 23 | options: 24 | - 'Yes' 25 | - 'No' 26 | macos: 27 | description: 'MacOS (intel)' 28 | default: true 29 | required: false 30 | type: boolean 31 | osxarm64gh: 32 | description: 'MacOS (silicon)' 33 | default: true 34 | required: false 35 | type: boolean 36 | osxarm64: 37 | description: 'MacOS (self-hosted)' 38 | default: false 39 | required: false 40 | type: boolean 41 | ubuntu: 42 | description: 'Ubuntu' 43 | default: true 44 | required: false 45 | type: boolean 46 | windows: 47 | description: 'Windows' 48 | default: true 49 | required: false 50 | type: boolean 51 | jobs: 52 | createrelease: 53 | name: ${{ github.event.inputs.release == 'Yes' && 'Create Release' || 'Prepare Frontend' }} 54 | runs-on: [ubuntu-latest] 55 | outputs: 56 | matrix: ${{ steps.set-matrix.outputs.matrix }} 57 | steps: 58 | - name: Get latest frontend and prepare matrix 59 | run: | 60 | curl -L --max-redirs 10 -o ledfx_frontend_v2.zip "https://github.com/YeonV/LedFx-Frontend-v2/releases/latest/download/ledfx_frontend_v2.zip" 61 | 62 | - name: Save Frontend for publish 63 | uses: actions/upload-artifact@v4 64 | with: 65 | name: ledfx_frontend_v2 66 | path: ledfx_frontend_v2.zip 67 | - name: Get Messages 68 | if: github.event.inputs.release == 'Yes' 69 | run: | 70 | unzip -p ledfx_frontend_v2.zip ledfx_frontend_v2/messages.md >message.md 71 | echo "## New LedFx binaries available: 72 | 73 | ### Core: -- Browser-Based 74 | ### Client: -- Desktop-App (needs a running Core) 75 | ### CC: -- Desktop-App (Core-integrated) 76 | 77 | --- 78 | 79 | ## More informations regarding Core, Client and CC: 80 | 81 |
expand 82 | 83 | #### Core 84 | If you don't know where to start, get this, open an internet browser, go to https://localhost:8888/ and off you go. 85 | This is the server/backend that takes in audio, does the calculations and outputs blinking lights. Runs in the background on a Windows/Mac/Linux computer. You can then open the frontend in an internet browser, by going to https://localhost:8888/ on the same computer that is running the Core. 86 | You can also pull up the frontend on your smartphone (or any other computer on the same network) by finding out what local IP your computer running the Core uses (most likely something like this 192.168.1.XXX, or 192.168.0.XXX) and opening a Browser on your smartphone and going to eg. https://192.168.1.123:8888/ 87 | 88 | 89 | #### Client 90 | This is a Desktop App that opens the frontend of LedFx in a window on your desktop. 91 | This app does NOT include the LedFx backend/server and cannot run LedFx by itself without the Core. 92 | This Client app is useful for connecting to a running Core on your network (or the same machine). 93 | 94 | ### CC (Client + Core = CC) 95 | This is the Client and Core integrated into one Desktop App. 96 | This Desktop App opens the Client frontend of LedFx in a window on your desktop AND runs the Core backend/server in the background. 97 | This is useful for people who want the whole LedFx experience in one nice and tidy package. 98 | With this, you can still connect to the backend server via a Client or browser. 99 | 100 |
101 | 102 | --- 103 | 104 | ## ⚠️ These builds are not signed (read this please): 105 | 106 |
Mac-Users: 107 | 108 | #### Infos: 109 | Reports as damaged, because of unsiged. 110 | To fix it open Terminal and type in the following (with a SPACE at the end): 111 | 112 | sudo xattr -cr 113 | 114 | Then drag'n'drop the LedFx.app File into the terminal and hit enter -> it should ask for sudo password 115 | 116 | Now you can open the App normally, give microphone and network permission, and you can even drag it into your applications. 117 | Maybe at some point we might buy an apple dev-license for 99€/year, then the voodoo would not be needed anymore. 118 | 119 |
120 | 121 | 122 |
Win-Users: 123 | 124 | #### Infos: 125 | Reports as unsave, because of unsiged. 126 | 127 | Maybe at some point we might buy a microsoft dev-license 128 | 129 |
130 | " >> ./messages.md 131 | 132 | - uses: actions/checkout@v4 133 | if: github.event.inputs.release == 'Yes' 134 | with: 135 | repository: YeonV/LedFx-Frontend-v2 136 | ref: main 137 | path: frontend 138 | fetch-depth: 0 139 | 140 | - name: Get frontend Changelog 141 | if: github.event.inputs.release == 'Yes' 142 | run: | 143 | cd frontend 144 | echo " 145 | ### Frontend-Changes: 146 |
Expand 147 | 148 | " >> ../messages.md 149 | git log --pretty=format:"+ %s [![by](https://img.shields.io/badge/by-$(echo %an)-blue.svg?logo=github&logoColor=white)](https://github.com/LedFx/LedFx/commit/%h)" $(git describe --tags --abbrev=0 @^)..@ | grep -v -E '(cleanup)' | awk '{ sub(/\[\[!\]\]/, ""); msg = substr($0, 1, index($0, "[!") - 1); if (length(msg) >= 5 && !seen[msg]++) { print $0 } }' | awk '{ while (match($0, /https:\/\/img\.shields\.io\/badge\/by-[^"]*-blue\.svg\?logo=github&logoColor=white/)) { url = substr($0, RSTART, RLENGTH); gsub(" ", "_", url); gsub("-", "_", url); gsub("by_", "by-", url); gsub("_blue", "-blue", url); printf "%s%s", substr($0, 1, RSTART - 1), url; $0 = substr($0, RSTART + RLENGTH) } gsub(" ", "_", $0); print }' >> ../messages.md 150 | echo " 151 |
152 | 153 | " >> ../messages.md 154 | cat ../messages.md 155 | - uses: actions/checkout@v4 156 | if: github.event.inputs.release == 'Yes' 157 | with: 158 | repository: LedFx/LedFx 159 | ref: main 160 | path: backend 161 | fetch-depth: 0 162 | 163 | - name: Get Backend Changelog 164 | if: github.event.inputs.release == 'Yes' 165 | run: | 166 | cd backend 167 | echo " 168 | ### Backend Changes 169 |
Expand 170 | 171 | " >> ../messages.md 172 | git log --pretty=format:"+ %s [![by](https://img.shields.io/badge/by-$(echo %an)-blue.svg?logo=github&logoColor=white)](https://github.com/LedFx/LedFx/commit/%h)" $(git describe --tags --abbrev=0 @^)..@ | grep -v -E '(cleanup)' | awk '{ sub(/\[\[!\]\]/, ""); msg = substr($0, 1, index($0, "[!") - 1); if (length(msg) >= 5 && !seen[msg]++) { print $0 } }' | awk '{ while (match($0, /https:\/\/img\.shields\.io\/badge\/by-[^"]*-blue\.svg\?logo=github&logoColor=white/)) { url = substr($0, RSTART, RLENGTH); gsub(" ", "_", url); gsub("-", "_", url); gsub("by_", "by-", url); gsub("_blue", "-blue", url); printf "%s%s", substr($0, 1, RSTART - 1), url; $0 = substr($0, RSTART + RLENGTH) } gsub(" ", "_", $0); print }' >> ../messages.md 173 | echo " 174 |
175 | 176 | " >> ../messages.md 177 | cat ../messages.md 178 | - name: Create Release 179 | if: github.event.inputs.release == 'Yes' 180 | id: create_release 181 | uses: actions/create-release@v1 182 | env: 183 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 184 | with: 185 | tag_name: v${{ env.action_state || '2.0' }}.${{ github.event.inputs.fversion }} 186 | release_name: Release v${{ env.action_state || '2.0'}}.${{ github.event.inputs.fversion }} 187 | body_path: ./messages.md 188 | draft: false 189 | prerelease: true 190 | - name: Output Release URL File 191 | if: github.event.inputs.release == 'Yes' 192 | run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt 193 | - name: Save Release URL File for publish 194 | if: github.event.inputs.release == 'Yes' 195 | uses: actions/upload-artifact@v4 196 | with: 197 | name: release_url 198 | path: release_url.txt 199 | - name: Check Inputs and Prepare Matrix 200 | id: set-matrix 201 | run: | 202 | echo windows: ${{ github.event.inputs.windows }} 203 | echo ubuntu: ${{ github.event.inputs.ubuntu }} 204 | echo macos: ${{ github.event.inputs.macos }} 205 | 206 | os_list=() 207 | if [ "${{ github.event.inputs.windows }}" = "true" ]; then 208 | os_list+=('windows-latest') 209 | fi 210 | if [ "${{ github.event.inputs.ubuntu }}" = "true" ]; then 211 | os_list+=('ubuntu-latest') 212 | fi 213 | if [ "${{ github.event.inputs.macos }}" = "true" ]; then 214 | os_list+=('macos-13') 215 | fi 216 | if [ "${{ github.event.inputs.osxarm64 }}" = "true" ]; then 217 | os_list+=('osx-arm64') 218 | fi 219 | if [ "${{ github.event.inputs.osxarm64gh }}" = "true" ]; then 220 | os_list+=('macos-latest') 221 | fi 222 | 223 | matrix_json="{\"os\": [" 224 | for os in "${os_list[@]}"; do 225 | matrix_json+="\"$os\"," 226 | done 227 | matrix_json=${matrix_json%?} # remove trailing comma 228 | matrix_json+="], \"python-version\": [\"3.12.x\"]}" 229 | 230 | echo "$matrix_json" > matrix.json 231 | echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT 232 | 233 | build: 234 | needs: createrelease 235 | continue-on-error: true 236 | runs-on: ${{ matrix.os }} 237 | defaults: 238 | run: 239 | shell: bash -x {0} 240 | strategy: 241 | fail-fast: false 242 | matrix: ${{fromJson(needs.createrelease.outputs.matrix)}} 243 | steps: 244 | - name: Check out code from GitHub 245 | uses: actions/checkout@v4 246 | with: 247 | repository: LedFx/LedFx 248 | ref: main 249 | path: src 250 | 251 | - uses: actions/checkout@v4 252 | name: Check out tools from GitHub 253 | with: 254 | repository: YeonV/LedFx-Builds 255 | token: ${{ secrets.GITHUB_TOKEN }} 256 | ref: main 257 | path: src2 258 | - name: Delete old frontend 259 | uses: JesseTG/rm@2fb8f3b8a0e41fc222e7943b63306c602feb187e 260 | with: 261 | path: ./src/ledfx_frontend 262 | - name: get git version 263 | run: | 264 | cp ./src2/tools/cors.patch ./src/cors.patch 265 | cd src 266 | git rev-parse HEAD >> ledfx/git_version 267 | git apply cors.patch 268 | cd .. 269 | - name: Get latest frontend 270 | run: | 271 | curl -L --max-redirs 10 -o ledfx_frontend_v2.zip "https://github.com/YeonV/LedFx-Frontend-v2/releases/latest/download/ledfx_frontend_v2.zip" 272 | - name: Include new frontend 273 | if: "startsWith(matrix.OS, 'osx-arm64')" 274 | run: | 275 | cd ./ledfx_frontend_v2 276 | ls 277 | unzip -o -u ledfx_frontend_v2.zip 278 | cd .. 279 | cp -rf ./ledfx_frontend_v2 ./src/ledfx_frontend 280 | ls ./src/ledfx_frontend 281 | 282 | - name: Include new frontend win 283 | if: "!startsWith(matrix.OS, 'osx-arm64')" 284 | run: | 285 | unzip ledfx_frontend_v2.zip 286 | cp -r ./ledfx_frontend_v2 ./src/ledfx_frontend 287 | ls ./src/ledfx_frontend 288 | 289 | - name: Disable Sentry 290 | if: "!startsWith(matrix.OS, 'osx-arm64') && !startsWith(matrix.OS, 'macos')" 291 | run: | 292 | sed -i '/if args.offline_mode is False:/d' ./src/ledfx/__main__.py 293 | sed -i '/setup_sentry()/d' ./src/ledfx/__main__.py 294 | 295 | - name: Disable Sentry Osx 296 | if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos')" 297 | run: | 298 | sed -i '' '/if args.offline_mode is False:/d' ./src/ledfx/__main__.py 299 | sed -i '' '/setup_sentry()/d' ./src/ledfx/__main__.py 300 | 301 | - name: Set up Python 302 | if: "!startsWith(matrix.OS, 'osx-arm64')" 303 | uses: actions/setup-python@v5 304 | with: 305 | python-version: ${{ matrix.python-version }} 306 | 307 | - name: Install build dependencies for osx-arm64 308 | if: "startsWith(matrix.OS, 'osx-arm64')" 309 | run: | 310 | arch -arm64 brew install portaudio 311 | arch -arm64 brew install mbedtls@2 312 | arch -arm64 brew install libsamplerate 313 | arch -arm64 brew install poetry 314 | 315 | - name: Install build dependencies for osx 316 | if: "startsWith(matrix.OS, 'macos-latest')" 317 | run: | 318 | brew install portaudio 319 | brew install mbedtls@2 320 | brew install libsamplerate 321 | 322 | - name: Setup mbedtls path for osx-arm64 323 | if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos-latest')" 324 | run: | 325 | echo "/opt/homebrew/opt/mbedtls@2/bin" >> $GITHUB_PATH 326 | echo "LDFLAGS=-L/opt/homebrew/opt/mbedtls@2/lib" >> $GITHUB_ENV 327 | echo "CPPFLAGS=-I/opt/homebrew/opt/mbedtls@2/include" >> $GITHUB_ENV 328 | echo "PKG_CONFIG_PATH=/opt/homebrew/opt/mbedtls@2/lib/pkgconfig" >> $GITHUB_ENV 329 | 330 | - name: Get full Python version 331 | if: "!startsWith(matrix.OS, 'osx-arm64')" 332 | id: full-python-version 333 | run: echo version=$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") >> $GITHUB_OUTPUT 334 | 335 | - name: Check Python version osx-arm64 336 | if: "startsWith(matrix.OS, 'osx-arm64')" 337 | run: | 338 | arch -arm64 poetry --version 339 | 340 | - name: Install poetry 341 | if: "!startsWith(matrix.OS, 'osx-arm64')" 342 | run: | 343 | curl -sSL https://install.python-poetry.org | python - -y 344 | 345 | - name: Update Path for Windows 346 | if: "startsWith(matrix.OS, 'win')" 347 | run: echo "$APPDATA\Python\Scripts" >> $GITHUB_PATH 348 | 349 | - name: Update Path for MacOS 350 | if: "startsWith(matrix.OS, 'macos')" 351 | run: echo "$HOME/.local/bin:$PATH" >> $GITHUB_PATH 352 | 353 | - name: Enable long paths for git on Windows 354 | if: "startsWith(matrix.OS, 'win')" 355 | run: git config --system core.longpaths true 356 | 357 | - name: Configure poetry 358 | if: "!startsWith(matrix.OS, 'osx-arm64') && !startsWith(matrix.OS, 'macos-latest')" 359 | run: poetry config virtualenvs.in-project true 360 | 361 | - name: Configure poetry osx-arm64 362 | if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos-latest')" 363 | run: | 364 | cd src 365 | arch -arm64 poetry config virtualenvs.in-project true 366 | arch -arm64 poetry env info 367 | cd .. 368 | 369 | - name: Get pip cache dir 370 | if: "!startsWith(matrix.OS, 'osx-arm64')" 371 | id: pip-cache 372 | run: | 373 | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT 374 | echo "dir=$(pip cache dir)" 375 | - name: pip cache 376 | if: "!startsWith(matrix.OS, 'osx-arm64')" 377 | uses: actions/cache@v4 378 | with: 379 | path: ${{ steps.pip-cache.outputs.dir }} 380 | key: ${{ runner.os }}-pip-${{ hashFiles('**/poetry.lock') }} 381 | restore-keys: | 382 | ${{ runner.os }}-pip- 383 | 384 | - name: Bump version 385 | if: "startsWith(matrix.OS, 'win') || startsWith(matrix.OS, 'ubu')" 386 | run: | 387 | sed -i '0,/PROJECT_VERSION = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//PROJECT_VERSION = "\1.\2.${{ github.event.inputs.fversion }}"/' ./src/ledfx/consts.py 388 | sed -i '0,/version = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//version = "\1.\2.${{ github.event.inputs.fversion }}"/' ./src/pyproject.toml 389 | new_version=$(sed -n 's/.*PROJECT_VERSION = "\([0-9]*\.[0-9]*\.[0-9]*\(-[a-z0-9]*\)*\)".*/\1/p' ./src/ledfx/consts.py) 390 | echo "action_state=$new_version" >> $GITHUB_ENV 391 | BINARY_NAME=LedFx_core- 392 | echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV 393 | 394 | - name: Bump version osx 395 | if: "!startsWith(matrix.OS, 'win') && !startsWith(matrix.OS, 'ubu')" 396 | run: | 397 | brew install gnu-sed 398 | cd src 399 | gsed -i '0,/PROJECT_VERSION = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//PROJECT_VERSION = "\1.\2.${{ github.event.inputs.fversion }}"/' ./ledfx/consts.py 400 | gsed -i '0,/version = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//version = "\1.\2.${{ github.event.inputs.fversion }}"/' ./pyproject.toml 401 | new_version=$(gsed -n 's/.*PROJECT_VERSION = "\([0-9]*\.[0-9]*\.[0-9]*\(-[a-z0-9]*\)*\)".*/\1/p' ./ledfx/consts.py) 402 | echo "action_state=$new_version" >> $GITHUB_ENV 403 | BINARY_NAME=LedFx_core- 404 | echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV 405 | 406 | # - uses: stefanzweifel/git-auto-commit-action@v4 407 | # continue-on-error: true 408 | # if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' 409 | # with: 410 | # commit_message: "[new-frontend] v2.0.${{ github.event.inputs.fversion }}" 411 | # push_options: --force 412 | # repository: ./src 413 | # token: ${{ secrets.LEDFX_TOKEN }} 414 | # tagging_message: 'v2.0.${{ github.event.inputs.fversion }}' 415 | # - name: Create Pull Request 416 | # continue-on-error: true 417 | # if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' 418 | # uses: peter-evans/create-pull-request@v4 419 | # with: 420 | # path: ./src 421 | # token: ${{ secrets.LEDFX_TOKEN }} 422 | # delete-branch: true 423 | # branch: new-frontend 424 | # commit-message: '[new-frontend] v2.0.${{ github.event.inputs.fversion }}' 425 | # title: Release v2.0.${{ github.event.inputs.fversion }} 426 | # body: New version incoming! 427 | 428 | - name: Check lock file 429 | if: "!startsWith(matrix.OS, 'osx-arm64') && !startsWith(matrix.OS, 'macos-latest')" 430 | run: | 431 | cd src 432 | poetry check --lock 433 | 434 | - name: Check lock file osx-arm64 435 | if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos-latest')" 436 | run: | 437 | cd src 438 | arch -arm64 poetry check --lock 439 | 440 | # - name: Build a binary wheel 441 | # if: "!startsWith(matrix.OS, 'osx-arm64') && !startsWith(matrix.OS, 'macos-latest')" 442 | # run: | 443 | # cd src 444 | # poetry install --extras hue 445 | # poetry build 446 | 447 | # - name: Build a binary wheel osx-arm64 448 | # if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos-latest')" 449 | # run: | 450 | # cd src 451 | # export PATH="/opt/homebrew/opt/mbedtls@2/bin:$PATH" 452 | # export LDFLAGS="-L/opt/homebrew/opt/mbedtls@2/lib" 453 | # export CPPFLAGS="-I/opt/homebrew/opt/mbedtls@2/include" 454 | # export CFLAGS="-Wno-incompatible-function-pointer-types" 455 | # arch -arm64 poetry install --extras hue 456 | # arch -arm64 poetry build 457 | 458 | - name: Install LedFx 459 | if: "!startsWith(matrix.OS, 'osx-arm64') && !startsWith(matrix.OS, 'macos-latest')" 460 | run: | 461 | cd src 462 | export PATH="/opt/homebrew/opt/mbedtls@2/bin:$PATH" 463 | export LDFLAGS="-L/opt/homebrew/opt/mbedtls@2/lib" 464 | export CPPFLAGS="-I/opt/homebrew/opt/mbedtls@2/include" 465 | export CFLAGS="-Wno-incompatible-function-pointer-types" 466 | poetry install --extras hue 467 | poetry install --with dev 468 | poetry env info 469 | echo "poetry_venv_location=$(poetry env info --path)" >> $GITHUB_ENV 470 | poetry run ledfx-loopback-install 471 | poetry run pip install pyinstaller 472 | poetry run pip install samplerate==0.2.1 473 | 474 | - name: Install LedFx osx-arm64 475 | if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos-latest')" 476 | run: | 477 | cd src 478 | export PATH="/opt/homebrew/opt/mbedtls@2/bin:$PATH" 479 | export LDFLAGS="-L/opt/homebrew/opt/mbedtls@2/lib" 480 | export CPPFLAGS="-I/opt/homebrew/opt/mbedtls@2/include" 481 | export CFLAGS="-Wno-incompatible-function-pointer-types" 482 | arch -arm64 poetry install --extras hue 483 | arch -arm64 poetry install --with dev 484 | arch -arm64 poetry run pip install samplerate==0.2.1 485 | 486 | - name: Portaudio dependency for windows 487 | if: startsWith(runner.os, 'Windows') && github.event.inputs.portaudio == 'true' 488 | uses: msys2/setup-msys2@v2 489 | with: 490 | msystem: MINGW64 491 | update: true 492 | install: | 493 | git 494 | zip 495 | unzip 496 | base-devel 497 | mingw-w64-x86_64-gcc 498 | mingw-w64-x86_64-cmake 499 | mingw-w64-x86_64-ninja 500 | 501 | - name: Build portaudio 502 | if: startsWith(runner.os, 'Windows') && github.event.inputs.portaudio == 'true' 503 | shell: msys2 {0} 504 | run: | 505 | export CYGPATH=$(cygpath -m /) 506 | git clone https://github.com/portaudio/portaudio 507 | cmake -B portaudio/.build -S portaudio -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} -DPA_BUILD_SHARED_LIBS=on -DCMAKE_BUILD_TYPE=Release -DPA_USE_ASIO=on 508 | cmake --build portaudio/.build/ 509 | cmake --install portaudio/.build/ 510 | rm -rf portaudio 511 | mv $CYGPATH/mingw64/bin/libportaudio.dll $poetry_venv_location/lib/site-packages/_sounddevice_data/portaudio-binaries/libportaudio64bit.dll 512 | 513 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} 514 | if: startsWith(runner.os, 'Windows') 515 | run: | 516 | # mv src2/tools/win/hook-samplerate.py $poetry_venv_location/lib/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks/hook-samplerate.py 517 | mv src2/tools/win/win.spec src/win.spec 518 | cd src 519 | poetry run pip install samplerate==0.2.1 520 | poetry run pyinstaller win.spec 521 | mv dist/LedFx $BINARY_NAME-v$action_state 522 | 7z.exe a -tzip $BINARY_NAME-v$action_state--win.zip $BINARY_NAME-v$action_state "-mx5" "-xr!.git" "-xr!.github" 523 | 524 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} osx-x64 525 | if: "startsWith(matrix.OS, 'macos-13')" 526 | run: | 527 | mv src2/tools/mac/mac.spec src/mac.spec 528 | cd src 529 | # sed -i '' -e "s/2.0.51/\${{ env.action_state }}/g" mac.spec 530 | poetry run pip install pyinstaller 531 | poetry run pip install samplerate==0.2.1 532 | poetry run pyinstaller mac.spec 533 | cd dist/ && mkdir LedFx && chmod +x ./LedFx_v2/Contents/MacOS/LedFx_v2 && mkdir -p ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/ && cp -rf ../../src2/tools/mac/libsamplerate-x86-x64.dylib ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/libsamplerate.dylib && mv ./LedFx_v2 ./LedFx/LedFx.app 534 | cd .. 535 | rm -rf ./LedFx.app 536 | mv ./dist/LedFx/LedFx.app ./LedFx.app 537 | xattr -cr ./LedFx.app 538 | tar -czf my_files.tar ./LedFx.app 539 | 540 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} osx-arm64 541 | if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos-latest')" 542 | run: | 543 | mv src2/tools/mac/mac-arm64.spec src/mac.spec 544 | cd src 545 | # sed -i '' -e "s/2.0.51/\${{ env.action_state }}/g" mac.spec 546 | arch -arm64 poetry run pip install pyinstaller 547 | arch -arm64 poetry run pyinstaller mac.spec 548 | cd dist/ && mkdir LedFx && chmod +x ./LedFx_v2/Contents/MacOS/LedFx_v2 && mkdir -p ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/ && cp -rf ../../src2/tools/mac/libsamplerate-arm64.dylib ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/libsamplerate.dylib && mv ./LedFx_v2 ./LedFx/LedFx.app 549 | cd .. 550 | rm -rf ./LedFx.app 551 | mv ./dist/LedFx/LedFx.app ./LedFx.app 552 | tar -czf my_files.tar ./LedFx.app 553 | 554 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} linux 555 | if: "startsWith(matrix.OS, 'ubuntu')" 556 | run: | 557 | sudo apt install libatlas3-base \ 558 | libavformat58 \ 559 | portaudio19-dev \ 560 | pulseaudio 561 | mv src2/tools/linux/yzlinux.spec src/linux.spec 562 | cd src 563 | poetry run pip install pyinstaller 564 | poetry run pip install samplerate==0.2.1 565 | poetry run pip install mido 566 | poetry run pyinstaller linux.spec 567 | cd dist && mkdir LedFx-linux && mv ./LedFx ./LedFx-linux/LedFx && cd .. 568 | cd .. 569 | cd src/dist && ls && tar -czf LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz ./LedFx-linux 570 | 571 | - name: Load Release URL File from release job 572 | if: github.event.inputs.release == 'Yes' 573 | uses: actions/download-artifact@v4 574 | with: 575 | name: release_url 576 | - name: Get Release File Name & Upload URL 577 | if: github.event.inputs.release == 'Yes' 578 | id: get_release_info 579 | shell: bash 580 | run: | 581 | value=`cat release_url.txt` 582 | echo "upload_url=$value" >> $GITHUB_OUTPUT 583 | - name: Load Frontend Build File from release job 584 | if: startsWith(runner.os, 'Windows') 585 | uses: actions/download-artifact@v4 586 | with: 587 | name: ledfx_frontend_v2 588 | - name: Upload Frontend Build to Release 589 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' 590 | id: upload-release-asset-2 591 | uses: actions/upload-release-asset@v1 592 | env: 593 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 594 | with: 595 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 596 | asset_path: ./ledfx_frontend_v2.zip 597 | asset_name: ledfx_frontend-v${{ env.action_state }}.zip 598 | asset_content_type: application/zip 599 | 600 | - name: Upload Frontend Build to Workflow 601 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' 602 | uses: actions/upload-artifact@v4 603 | with: 604 | name: ledfx_frontend-v${{ env.action_state }}.zip 605 | path: ledfx_frontend_v2/ledfx_frontend_v2.zip 606 | 607 | - name: Upload Core Win To Release 608 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' && github.event.inputs.windows == 'true' 609 | uses: YeonV/upload-release-asset@v1 610 | env: 611 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 612 | with: 613 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 614 | asset_path: src/${{ env.BINARY_NAME }}-v${{ env.action_state }}--win.zip 615 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win.zip 616 | asset_content_type: application/zip 617 | 618 | - name: Upload Core Win To Workflow 619 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' && github.event.inputs.windows == 'true' 620 | uses: actions/upload-artifact@v4 621 | with: 622 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win.zip 623 | path: src/${{ env.BINARY_NAME }}-v${{ env.action_state }}--win.zip 624 | 625 | - name: Upload Core Osx-arm64 To Release 626 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64gh == 'true' 627 | uses: YeonV/upload-release-asset@v1 628 | env: 629 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 630 | with: 631 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 632 | asset_path: src/my_files.tar 633 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-arm64.zip 634 | asset_content_type: application/zip 635 | 636 | - name: Upload Core Osx-arm64 to Workflow 637 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64gh == 'true' 638 | uses: actions/upload-artifact@v4 639 | with: 640 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-arm64.zip 641 | path: src/my_files.tar 642 | 643 | - name: Upload Core Osx-arm64-b To Release 644 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64 == 'true' 645 | uses: YeonV/upload-release-asset@v1 646 | env: 647 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 648 | with: 649 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 650 | asset_path: src/my_files.tar 651 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-arm64-b.zip 652 | asset_content_type: application/zip 653 | 654 | - name: Upload Core Osx-arm64-b to Workflow 655 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64 == 'true' 656 | uses: actions/upload-artifact@v4 657 | with: 658 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-arm64-b.zip 659 | path: src/my_files.tar 660 | 661 | - name: Upload Core Osx To Release 662 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'Yes' && github.event.inputs.macos == 'true' 663 | uses: YeonV/upload-release-asset@v1 664 | env: 665 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 666 | with: 667 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 668 | asset_path: src/my_files.tar 669 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-x64.zip 670 | asset_content_type: application/zip 671 | 672 | - name: Upload Core Osx to Workflow 673 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'No' && github.event.inputs.macos == 'true' 674 | uses: actions/upload-artifact@v4 675 | with: 676 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-x64.zip 677 | path: src/my_files.tar 678 | 679 | - name: Build ${{ env.BINARY_NAME }} portable ${{ env.action_state }} 680 | if: startsWith(runner.os, 'Windows') 681 | run: | 682 | cp src2/tools/win/yzwin.spec ./src/win-portable.spec 683 | cd src 684 | poetry run pyinstaller win-portable.spec 685 | ls dist/ 686 | mv dist/LedFx.exe dist/$BINARY_NAME-v$action_state--win-portable.exe 687 | 688 | - name: Upload Core Linux To Release 689 | if: startsWith(matrix.os, 'ubuntu') && github.event.inputs.release == 'Yes' && github.event.inputs.ubuntu == 'true' 690 | continue-on-error: true 691 | uses: YeonV/upload-release-asset@v1 692 | env: 693 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 694 | with: 695 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 696 | asset_path: src/dist/LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz 697 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--linux-x64.tar.gz 698 | asset_content_type: application/gzip 699 | 700 | - name: Upload Core Linux To Worflow 701 | if: startsWith(matrix.os, 'ubuntu') && github.event.inputs.release == 'No' && github.event.inputs.ubuntu == 'true' 702 | uses: actions/upload-artifact@v4 703 | with: 704 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--linux-x64.tar.gz 705 | path: src/dist/LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz 706 | 707 | - name: Upload Core Win Portable To Release 708 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' && github.event.inputs.windows == 'true' 709 | uses: YeonV/upload-release-asset@v1 710 | env: 711 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 712 | with: 713 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 714 | asset_path: src\dist\${{ env.BINARY_NAME }}-v${{ env.action_state }}--win-portable.exe 715 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win-portable.exe 716 | asset_content_type: application/vnd.microsoft.portable-executable 717 | 718 | - name: Upload Core Win Portable To Worflow 719 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' && github.event.inputs.windows == 'true' 720 | uses: actions/upload-artifact@v4 721 | with: 722 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win-portable.exe 723 | path: src\dist\${{ env.BINARY_NAME }}-v${{ env.action_state }}--win-portable.exe 724 | 725 | # CLIENTS 726 | - uses: actions/checkout@v4 727 | with: 728 | repository: YeonV/LedFx-Frontend-v2 729 | ref: main 730 | path: frontend 731 | 732 | - name: Move Core-win 733 | continue-on-error: true 734 | if: startsWith(runner.os, 'Windows') && github.event.inputs.windows == 'true' 735 | run: | 736 | ls ./src 737 | echo ------------ 738 | ls ./src/LedFx_core--v${{ env.action_state }} 739 | echo ------------ 740 | ls ./src/dist 741 | echo ------------ 742 | cp -r ./src/LedFx_core--v${{ env.action_state }}/ ./frontend/extraResources/LedFx/ && 743 | ls ./frontend/extraResources/LedFx 744 | 745 | - name: Move Core-osx 746 | if: (startsWith(matrix.OS, 'osx') || startsWith(matrix.OS, 'mac')) && github.event.inputs.macos == 'true' 747 | continue-on-error: true 748 | run: | 749 | cp -r ./src/LedFx.app ./frontend/extraResources/LedFx_core.app 750 | echo ------------ 751 | ls ./frontend/extraResources 752 | 753 | - name: Move Core Linux 754 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.ubuntu == 'true' 755 | continue-on-error: true 756 | run: | 757 | ls 758 | cp -r ./src/dist/LedFx-linux/LedFx ./frontend/extraResources/LedFx 759 | echo ------------ 760 | ls ./frontend/extraResources 761 | 762 | - name: Set up Node.js 763 | if: "!startsWith(matrix.OS, 'osx-arm64') && !startsWith(matrix.OS, 'macos-latest')" 764 | uses: actions/setup-node@v4 765 | with: 766 | node-version: 20 767 | # architecture: ${{ matrix.arch }} 768 | # cache: 'yarn' 769 | # cache-dependency-path: '**/yarn.lock' 770 | - name: Set up Node.js osx-arm64 771 | if: "startsWith(matrix.OS, 'osx-arm64') || startsWith(matrix.OS, 'macos-latest')" 772 | uses: actions/setup-node@v4 773 | with: 774 | node-version: 20 775 | architecture: arm64 776 | # cache: 'yarn' 777 | # cache-dependency-path: '**/yarn.lock' 778 | - name: Disable CI checks 779 | run: echo "CI=false" >> $GITHUB_ENV 780 | - name: Building Clients 781 | run: | 782 | cd frontend && npm config set legacy-peer-deps true && npm remove electron -g && npm remove electron-builder -g && npm i -D electron electron-builder && npm install --force && npm install postcss && npm run distall 783 | env: 784 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 785 | 786 | - name: Load Release URL File from release job 787 | if: github.event.inputs.release == 'Yes' 788 | uses: actions/download-artifact@v4 789 | with: 790 | name: release_url 791 | 792 | - name: Upload Win-Portable to Release 793 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' && github.event.inputs.windows == 'true' 794 | id: upload-release-asset-portable 795 | uses: YeonV/upload-release-asset@v1 796 | env: 797 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 798 | with: 799 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 800 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-portable.exe 801 | asset_name: LedFx_client-v${{ env.action_state }}--win-portable.exe 802 | asset_content_type: application/vnd.microsoft.portable-executable 803 | - name: Upload Win-Portable to Workflow 804 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' && github.event.inputs.windows == 'true' 805 | uses: actions/upload-artifact@v4 806 | with: 807 | name: LedFx_client-v${{ env.action_state }}--win-portable.exe 808 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-portable.exe 809 | 810 | - name: Upload Win-Setup to Release 811 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' && github.event.inputs.windows == 'true' 812 | id: upload-release-asset-setup 813 | uses: YeonV/upload-release-asset@v1 814 | env: 815 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 816 | with: 817 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 818 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-setup.exe 819 | asset_name: LedFx_client-v${{ env.action_state }}--win-setup.exe 820 | asset_content_type: application/vnd.microsoft.portable-executable 821 | - name: Upload Win-Setup to Workflow 822 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' && github.event.inputs.windows == 'true' 823 | uses: actions/upload-artifact@v4 824 | with: 825 | name: LedFx_client-v${{ env.action_state }}--win-setup.exe 826 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-setup.exe 827 | - name: Upload Win-Zip to Release 828 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' && github.event.inputs.windows == 'true' 829 | id: upload-release-asset-zip 830 | uses: YeonV/upload-release-asset@v1 831 | env: 832 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 833 | with: 834 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 835 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win.zip 836 | asset_name: LedFx_client-v${{ env.action_state }}--win.zip 837 | asset_content_type: application/zip 838 | - name: Upload Win-Zip to Workflow 839 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' && github.event.inputs.windows == 'true' 840 | uses: actions/upload-artifact@v4 841 | with: 842 | name: LedFx_client-v${{ env.action_state }}--win.zip 843 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win.zip 844 | 845 | - name: Upload Win-CC to Release 846 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' && github.event.inputs.windows == 'true' 847 | id: upload-release-asset-cc 848 | uses: YeonV/upload-release-asset@v1 849 | env: 850 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 851 | with: 852 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 853 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--win-setup.exe 854 | asset_name: LedFx_CC-v${{ env.action_state }}--win-setup.exe 855 | asset_content_type: application/vnd.microsoft.portable-executable 856 | - name: Upload Win-CC to Workflow 857 | if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' && github.event.inputs.windows == 'true' 858 | uses: actions/upload-artifact@v4 859 | with: 860 | name: LedFx_CC-v${{ env.action_state }}--win-setup.exe 861 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--win-setup.exe 862 | 863 | - name: Upload OSX-arm64-Client dmg to Release 864 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64gh == 'true' 865 | uses: YeonV/upload-release-asset@v1 866 | env: 867 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 868 | with: 869 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 870 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 871 | asset_name: LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 872 | asset_content_type: application/octet-stream 873 | 874 | - name: Upload OSX-arm64-b-Client dmg to Release 875 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64 == 'true' 876 | uses: YeonV/upload-release-asset@v1 877 | env: 878 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 879 | with: 880 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 881 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 882 | asset_name: LedFx_client-v${{ env.action_state }}--mac-arm64-b.dmg 883 | asset_content_type: application/octet-stream 884 | 885 | - name: Upload OSX-arm64-Client dmg to Workflow 886 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64gh == 'true' 887 | uses: actions/upload-artifact@v4 888 | with: 889 | name: LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 890 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 891 | 892 | - name: Upload OSX-arm64-b-Client dmg to Workflow 893 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64 == 'true' 894 | uses: actions/upload-artifact@v4 895 | with: 896 | name: LedFx_client-v${{ env.action_state }}--mac-arm64-b.dmg 897 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 898 | 899 | - name: Upload OSX-arm64-Client zip to Release 900 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64gh == 'true' 901 | uses: YeonV/upload-release-asset@v1 902 | env: 903 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 904 | with: 905 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 906 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.zip 907 | asset_name: LedFx_client-v${{ env.action_state }}--mac-arm64.zip 908 | asset_content_type: application/zip 909 | 910 | - name: Upload OSX-arm64-b-Client zip to Release 911 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64 == 'true' 912 | uses: YeonV/upload-release-asset@v1 913 | env: 914 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 915 | with: 916 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 917 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.zip 918 | asset_name: LedFx_client-v${{ env.action_state }}--mac-arm64-b.zip 919 | asset_content_type: application/zip 920 | 921 | - name: Upload OSX-arm64-Client zip to Workflow 922 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64gh == 'true' 923 | uses: actions/upload-artifact@v4 924 | with: 925 | name: LedFx_client-v${{ env.action_state }}--mac-arm64.zip 926 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.zip 927 | 928 | - name: Upload OSX-arm64-b-Client zip to Workflow 929 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64 == 'true' 930 | uses: actions/upload-artifact@v4 931 | with: 932 | name: LedFx_client-v${{ env.action_state }}--mac-arm64-b.zip 933 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.zip 934 | 935 | - name: Upload OSX-arm64-CC dmg to Release 936 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64gh == 'true' 937 | uses: YeonV/upload-release-asset@v1 938 | env: 939 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 940 | with: 941 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 942 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 943 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 944 | asset_content_type: application/octet-stream 945 | 946 | - name: Upload OSX-arm64-CC-b dmg to Release 947 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64 == 'true' 948 | uses: YeonV/upload-release-asset@v1 949 | env: 950 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 951 | with: 952 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 953 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 954 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-arm64-b.dmg 955 | asset_content_type: application/octet-stream 956 | 957 | - name: Upload OSX-arm64-CC dmg to Workflow 958 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64gh == 'true' 959 | uses: actions/upload-artifact@v4 960 | with: 961 | name: LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 962 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 963 | 964 | - name: Upload OSX-arm64-CC-b dmg to Workflow 965 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64 == 'true' 966 | uses: actions/upload-artifact@v4 967 | with: 968 | name: LedFx_CC-v${{ env.action_state }}--mac-arm64-b.dmg 969 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 970 | 971 | - name: Upload OSX-arm64-CC zip to Release 972 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64gh == 'true' 973 | uses: YeonV/upload-release-asset@v1 974 | env: 975 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 976 | with: 977 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 978 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 979 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 980 | asset_content_type: application/zip 981 | 982 | - name: Upload OSX-arm64-CC-b zip to Release 983 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'Yes' && github.event.inputs.osxarm64 == 'true' 984 | uses: YeonV/upload-release-asset@v1 985 | env: 986 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 987 | with: 988 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 989 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 990 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-arm64-b.zip 991 | asset_content_type: application/zip 992 | 993 | - name: Upload OSX-arm64-CC zip to Workflow 994 | if: startsWith(matrix.OS, 'macos-latest') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64gh == 'true' 995 | uses: actions/upload-artifact@v4 996 | with: 997 | name: LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 998 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 999 | 1000 | - name: Upload OSX-arm64-CC-b zip to Workflow 1001 | if: startsWith(matrix.OS, 'osx-arm64') && github.event.inputs.release == 'No' && github.event.inputs.osxarm64 == 'true' 1002 | uses: actions/upload-artifact@v4 1003 | with: 1004 | name: LedFx_CC-v${{ env.action_state }}--mac-arm64-b.zip 1005 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 1006 | 1007 | - name: Upload Linux Client snap to Release 1008 | continue-on-error: true 1009 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'Yes' && github.event.inputs.ubuntu == 'true' 1010 | uses: YeonV/upload-release-asset@v1 1011 | env: 1012 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1013 | with: 1014 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1015 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.snap 1016 | asset_name: LedFx_client-v${{ env.action_state }}--linux-amd64.snap 1017 | asset_content_type: application/octet-stream 1018 | - name: Upload Linux Client snap to Workflow 1019 | continue-on-error: true 1020 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'No' && github.event.inputs.ubuntu == 'true' 1021 | uses: actions/upload-artifact@v4 1022 | with: 1023 | name: LedFx_client-v${{ env.action_state }}--linux-amd64.snap 1024 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.snap 1025 | 1026 | - name: Upload Linux Client AppImage to Release 1027 | continue-on-error: true 1028 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'Yes' && github.event.inputs.ubuntu == 'true' 1029 | uses: YeonV/upload-release-asset@v1 1030 | env: 1031 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1032 | with: 1033 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1034 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.AppImage 1035 | asset_name: LedFx_client-v${{ env.action_state }}--linux-amd64.AppImage 1036 | asset_content_type: application/octet-stream 1037 | - name: Upload Linux Client AppImage to Workflow 1038 | continue-on-error: true 1039 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'No' && github.event.inputs.ubuntu == 'true' 1040 | uses: actions/upload-artifact@v4 1041 | with: 1042 | name: LedFx_client-v${{ env.action_state }}--linux-amd64.AppImage 1043 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.AppImage 1044 | 1045 | - name: Upload Linux CC snap to Release 1046 | continue-on-error: true 1047 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'Yes' && github.event.inputs.ubuntu == 'true' 1048 | uses: YeonV/upload-release-asset@v1 1049 | env: 1050 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1051 | with: 1052 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1053 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.snap 1054 | asset_name: LedFx_CC-v${{ env.action_state }}--linux-amd64.snap 1055 | asset_content_type: application/octet-stream 1056 | - name: Upload Linux CC snap to Workflow 1057 | continue-on-error: true 1058 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'No' && github.event.inputs.ubuntu == 'true' 1059 | uses: actions/upload-artifact@v4 1060 | with: 1061 | name: LedFx_CC-v${{ env.action_state }}--linux-amd64.snap 1062 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.snap 1063 | 1064 | - name: Upload Linux CC AppImage to Release 1065 | continue-on-error: true 1066 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'Yes' && github.event.inputs.ubuntu == 'true' 1067 | uses: YeonV/upload-release-asset@v1 1068 | env: 1069 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1070 | with: 1071 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1072 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.AppImage 1073 | asset_name: LedFx_CC-v${{ env.action_state }}--linux-amd64.AppImage 1074 | asset_content_type: application/octet-stream 1075 | - name: Upload Linux CC AppImage to Workflow 1076 | continue-on-error: true 1077 | if: startsWith(matrix.OS, 'ubuntu') && github.event.inputs.release == 'No' && github.event.inputs.ubuntu == 'true' 1078 | uses: actions/upload-artifact@v4 1079 | with: 1080 | name: LedFx_CC-v${{ env.action_state }}--linux-amd64.AppImage 1081 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.AppImage 1082 | 1083 | - name: Upload OSX-x64-Client dmg to Release 1084 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'Yes' && github.event.inputs.macos == 'true' 1085 | uses: YeonV/upload-release-asset@v1 1086 | env: 1087 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1088 | with: 1089 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1090 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.dmg 1091 | asset_name: LedFx_client-v${{ env.action_state }}--mac-x64.dmg 1092 | asset_content_type: application/octet-stream 1093 | 1094 | - name: Upload OSX-x64-Client dmg to Workflow 1095 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'No' && github.event.inputs.macos == 'true' 1096 | uses: actions/upload-artifact@v4 1097 | with: 1098 | name: LedFx_client-v${{ env.action_state }}--mac-x64.dmg 1099 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.dmg 1100 | 1101 | - name: Upload OSX-x64-Client zip to Release 1102 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'Yes' && github.event.inputs.macos == 'true' 1103 | uses: YeonV/upload-release-asset@v1 1104 | env: 1105 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1106 | with: 1107 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1108 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.zip 1109 | asset_name: LedFx_client-v${{ env.action_state }}--mac-x64.zip 1110 | asset_content_type: application/zip 1111 | - name: Upload OSX-x64-Client zip to Workflow 1112 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'No' && github.event.inputs.macos == 'true' 1113 | uses: actions/upload-artifact@v4 1114 | with: 1115 | name: LedFx_client-v${{ env.action_state }}--mac-x64.zip 1116 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.zip 1117 | 1118 | - name: Upload OSX-x64-CC dmg to Release 1119 | continue-on-error: true 1120 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'Yes' && github.event.inputs.macos == 'true' 1121 | uses: YeonV/upload-release-asset@v1 1122 | env: 1123 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1124 | with: 1125 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1126 | 1127 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 1128 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 1129 | asset_content_type: application/octet-stream 1130 | 1131 | - name: Upload OSX-x64-CC dmg to Workflow 1132 | continue-on-error: true 1133 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'No' && github.event.inputs.macos == 'true' 1134 | uses: actions/upload-artifact@v4 1135 | with: 1136 | name: LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 1137 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 1138 | 1139 | - name: Upload OSX-x64-CC zip to Release 1140 | continue-on-error: true 1141 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'Yes' && github.event.inputs.macos == 'true' 1142 | uses: YeonV/upload-release-asset@v1 1143 | env: 1144 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 1145 | with: 1146 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 1147 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.zip 1148 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-x64.zip 1149 | asset_content_type: application/zip 1150 | 1151 | - name: Upload OSX-x64-CC zip to Workflow 1152 | continue-on-error: true 1153 | if: startsWith(matrix.OS, 'macos-13') && github.event.inputs.release == 'No' && github.event.inputs.macos == 'true' 1154 | uses: actions/upload-artifact@v4 1155 | with: 1156 | name: LedFx_CC-v${{ env.action_state }}--mac-x64.zip 1157 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.zip 1158 | # - name: Send Discord Release Post 1159 | # if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'Yes' 1160 | # run: | 1161 | # curl -H "Content-Type: application/json" -d '{"content": "**[DOWNLOAD]** https://github.com/YeonV/LedFx-Builds/releases/tag/v${{ env.action_state }}\n\n**[PREVIEW]** **Please** do not send messages here. Use the [testing]-Post instead!", "thread_name": "[beta] Release 2.0.${{ github.event.inputs.fversion }}"}' ${{ secrets.DISCORD_RELEASE_WEBHOOK }} 1162 | # curl -H "Content-Type: application/json" -d '{"content": "https://github.com/YeonV/LedFx-Builds/releases/tag/v${{ env.action_state }}", "thread_name": "[testing] Release 2.0.${{ github.event.inputs.fversion }}"}' ${{ secrets.DISCORD_RELEASE_WEBHOOK }} 1163 | # 1164 | # - name: Send Discord Beta Post 1165 | # if: startsWith(runner.os, 'Windows') && github.event.inputs.release == 'No' 1166 | # run: | 1167 | # curl -H "Content-Type: application/json" -X POST -d "{\"content\":\"New Beta-Binaries available\n**DOWNLOAD:** https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n\n:regional_indicator_a: LedFx_core-v${{ env.action_state }}--win.zip\n:regional_indicator_b: LedFx_CC-v${{ env.action_state }}--linux-amd64.snap\n:regional_indicator_c: LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg\n:regional_indicator_d: LedFx_CC-v${{ env.action_state }}--mac-arm64.zip\n:regional_indicator_e: LedFx_CC-v${{ env.action_state }}--mac-x64.dmg\n:regional_indicator_f: LedFx_CC-v${{ env.action_state }}--mac-x64.zip\n:regional_indicator_g: LedFx_CC-v${{ env.action_state }}--win-setup.exe\n:regional_indicator_h: LedFx_client-v${{ env.action_state }}--linux-amd64.AppImage\n:regional_indicator_i: LedFx_client-v${{ env.action_state }}--linux-amd64.snap\n:regional_indicator_j: LedFx_client-v${{ env.action_state }}--mac-arm64.dmg\n:regional_indicator_k: LedFx_client-v${{ env.action_state }}--mac-arm64.zip\n:regional_indicator_l: LedFx_client-v${{ env.action_state }}--mac-x64.dmg\n:regional_indicator_m: LedFx_client-v${{ env.action_state }}--mac-x64.zip\n:regional_indicator_o: LedFx_client-v${{ env.action_state }}--win-portable.exe\n:regional_indicator_p: LedFx_client-v${{ env.action_state }}--win-setup.exe\n:regional_indicator_q: LedFx_client-v${{ env.action_state }}--win.zip\n:regional_indicator_r: LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz\n:regional_indicator_s: LedFx_core-v${{ env.action_state }}--osx-arm64.zip\n:regional_indicator_t: LedFx_core-v${{ env.action_state }}--osx-x64.zip\n:regional_indicator_u: LedFx_core-v${{ env.action_state }}--win-portable.exe\n:regional_indicator_v: LedFx_CC-v${{ env.action_state }}--linux-amd64.AppImage\"}" https://discord.com/api/webhooks/1196958406234345522/zSejZjvGh2rWdAIyIp3IL-8W-yXniX4bsXNxHi9Mn6QmlbhCThWPSDYoLT_PO5a2WQAb 1168 | # curl -H "Content-Type: application/json" -X POST -d "{\"content\":\"======================================\n**NOT WORKING**\"}" https://discord.com/api/webhooks/1196958406234345522/zSejZjvGh2rWdAIyIp3IL-8W-yXniX4bsXNxHi9Mn6QmlbhCThWPSDYoLT_PO5a2WQAb 1169 | # curl -H "Content-Type: application/json" -X POST -d "{\"content\":\"======================================\n**WORKING**\"}" https://discord.com/api/webhooks/1196958406234345522/zSejZjvGh2rWdAIyIp3IL-8W-yXniX4bsXNxHi9Mn6QmlbhCThWPSDYoLT_PO5a2WQAb 1170 | 1171 | -------------------------------------------------------------------------------- /.github/workflows/BuildPipelineUV.yml: -------------------------------------------------------------------------------- 1 | name: LedFx BuildPipeline UV 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | fversion: 7 | description: 'Frontend Version' 8 | default: '106' 9 | required: false 10 | release: 11 | description: 'Create Release' 12 | default: 'Yes' 13 | required: false 14 | type: choice 15 | options: 16 | - 'Yes' 17 | - 'No' 18 | macos: 19 | description: 'MacOS (intel)' 20 | default: true 21 | required: false 22 | type: boolean 23 | osxarm64: 24 | description: 'MacOS (silicon)' 25 | default: true 26 | required: false 27 | type: boolean 28 | ubuntu: 29 | description: 'Ubuntu' 30 | default: true 31 | required: false 32 | type: boolean 33 | windows: 34 | description: 'Windows' 35 | default: true 36 | required: false 37 | type: boolean 38 | 39 | jobs: 40 | createrelease: 41 | name: ${{ github.event.inputs.release == 'Yes' && 'Create Release' || 'Prepare Frontend' }} 42 | runs-on: [ubuntu-24.04] 43 | outputs: 44 | matrix: ${{ steps.set-matrix.outputs.matrix }} 45 | env: 46 | IS_RELEASE: ${{ github.event.inputs.release == 'Yes' && 'true' || 'false' }} 47 | BUILD_OSX_ARM64: ${{ github.event.inputs.osxarm64 == 'true' && 'true' || 'false' }} 48 | BUILD_OSX_X64: ${{ github.event.inputs.macos == 'true' && 'true' || 'false' }} 49 | BUILD_WIN: ${{ github.event.inputs.windows == 'true' && 'true' || 'false' }} 50 | BUILD_LINUX: ${{ github.event.inputs.ubuntu == 'true' && 'true' || 'false' }} 51 | action_state: "2.0" # Default value 52 | 53 | steps: 54 | - name: Get latest frontend and prepare matrix 55 | run: | 56 | curl -L --max-redirs 10 -o ledfx_frontend_v2.zip "https://github.com/YeonV/LedFx-Frontend-v2/releases/latest/download/ledfx_frontend_v2.zip" 57 | 58 | - name: Save Frontend for publish 59 | uses: actions/upload-artifact@v4 60 | with: 61 | name: ledfx_frontend_v2 62 | path: ledfx_frontend_v2.zip 63 | 64 | - name: Get Messages 65 | if: ${{ env.IS_RELEASE == 'true' }} 66 | run: | 67 | unzip -p ledfx_frontend_v2.zip ledfx_frontend_v2/messages.md >message.md 68 | echo "## New LedFx binaries available: 69 | 70 | ### Core: -- Browser-Based 71 | ### Client: -- Desktop-App (needs a running Core) 72 | ### CC: -- Desktop-App (Core-integrated) 73 | 74 | --- 75 | 76 | ## More informations regarding Core, Client and CC: 77 | 78 |
expand 79 | 80 | #### Core 81 | If you don't know where to start, get this, open an internet browser, go to https://localhost:8888/ and off you go. 82 | This is the server/backend that takes in audio, does the calculations and outputs blinking lights. Runs in the background on a Windows/Mac/Linux computer. You can then open the frontend in an internet browser, by going to https://localhost:8888/ on the same computer that is running the Core. 83 | You can also pull up the frontend on your smartphone (or any other computer on the same network) by finding out what local IP your computer running the Core uses (most likely something like this 192.168.1.XXX, or 192.168.0.XXX) and opening a Browser on your smartphone and going to eg. https://192.168.1.123:8888/ 84 | 85 | #### Client 86 | This is a Desktop App that opens the frontend of LedFx in a window on your desktop. 87 | This app does NOT include the LedFx backend/server and cannot run LedFx by itself without the Core. 88 | This Client app is useful for connecting to a running Core on your network (or the same machine). 89 | 90 | ### CC (Client + Core = CC) 91 | This is the Client and Core integrated into one Desktop App. 92 | This Desktop App opens the Client frontend of LedFx in a window on your desktop AND runs the Core backend/server in the background. 93 | This is useful for people who want the whole LedFx experience in one nice and tidy package. 94 | With this, you can still connect to the backend server via a Client or browser. 95 | 96 |
97 | 98 | --- 99 | 100 | ## ⚠️ These builds are not signed (read this please): 101 | 102 |
Mac-Users: 103 | 104 | #### Infos: 105 | Reports as damaged, because of unsiged. 106 | To fix it open Terminal and type in the following (with a SPACE at the end): 107 | 108 | sudo xattr -cr 109 | 110 | Then drag'n'drop the LedFx.app File into the terminal and hit enter -> it should ask for sudo password 111 | 112 | Now you can open the App normally, give microphone and network permission, and you can even drag it into your applications. 113 | Maybe at some point we might buy an apple dev-license for 99€/year, then the voodoo would not be needed anymore. 114 | 115 |
116 | 117 |
Win-Users: 118 | 119 | #### Infos: 120 | Reports as unsave, because of unsiged. 121 | 122 | Maybe at some point we might buy a microsoft dev-license 123 | 124 |
125 | " >> ./messages.md 126 | 127 | - uses: actions/checkout@v4 128 | if: ${{ env.IS_RELEASE == 'true' }} 129 | with: 130 | repository: YeonV/LedFx-Frontend-v2 131 | ref: main 132 | path: frontend 133 | fetch-depth: 0 134 | 135 | - name: Get frontend Changelog 136 | if: ${{ env.IS_RELEASE == 'true' }} 137 | run: | 138 | cd frontend 139 | echo " 140 | ### Frontend-Changes: 141 |
Expand 142 | 143 | " >> ../messages.md 144 | git log --pretty=format:"+ %s [![by](https://img.shields.io/badge/by-$(echo %an)-blue.svg?logo=github&logoColor=white)](https://github.com/LedFx/LedFx/commit/%h)" $(git describe --tags --abbrev=0 @^)..@ | grep -v -E '(cleanup)' | awk '{ sub(/\[\[!\]\]/, ""); msg = substr($0, 1, index($0, "[!") - 1); if (length(msg) >= 5 && !seen[msg]++) { print $0 } }' | awk '{ while (match($0, /https:\/\/img\.shields\.io\/badge\/by-[^"]*-blue\.svg\?logo=github&logoColor=white/)) { url = substr($0, RSTART, RLENGTH); gsub(" ", "_", url); gsub("-", "_", url); gsub("by_", "by-", url); gsub("_blue", "-blue", url); printf "%s%s", substr($0, 1, RSTART - 1), url; $0 = substr($0, RSTART + RLENGTH) } gsub(" ", "_", $0); print }' >> ../messages.md 145 | echo " 146 |
147 | 148 | " >> ../messages.md 149 | cat ../messages.md 150 | 151 | - uses: actions/checkout@v4 152 | if: ${{ env.IS_RELEASE == 'true' }} 153 | with: 154 | repository: LedFx/LedFx 155 | ref: main 156 | path: backend 157 | fetch-depth: 0 158 | 159 | - name: Get Backend Changelog 160 | if: ${{ env.IS_RELEASE == 'true' }} 161 | run: | 162 | cd backend 163 | echo " 164 | ### Backend Changes 165 |
Expand 166 | 167 | " >> ../messages.md 168 | git log --pretty=format:"+ %s [![by](https://img.shields.io/badge/by-$(echo %an)-blue.svg?logo=github&logoColor=white)](https://github.com/LedFx/LedFx/commit/%h)" $(git describe --tags --abbrev=0 @^)..@ | grep -v -E '(cleanup)' | awk '{ sub(/\[\[!\]\]/, ""); msg = substr($0, 1, index($0, "[!") - 1); if (length(msg) >= 5 && !seen[msg]++) { print $0 } }' | awk '{ while (match($0, /https:\/\/img\.shields\.io\/badge\/by-[^"]*-blue\.svg\?logo=github&logoColor=white/)) { url = substr($0, RSTART, RLENGTH); gsub(" ", "_", url); gsub("-", "_", url); gsub("by_", "by-", url); gsub("_blue", "-blue", url); printf "%s%s", substr($0, 1, RSTART - 1), url; $0 = substr($0, RSTART + RLENGTH) } gsub(" ", "_", $0); print }' >> ../messages.md 169 | echo " 170 |
171 | 172 | " >> ../messages.md 173 | cat ../messages.md 174 | 175 | - name: Create Release 176 | if: ${{ env.IS_RELEASE == 'true' }} 177 | id: create_release 178 | uses: actions/create-release@v1 179 | env: 180 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 181 | with: 182 | tag_name: v${{ env.action_state }}.${{ github.event.inputs.fversion }} 183 | release_name: "Release v${{ env.action_state }}.${{ github.event.inputs.fversion }}" 184 | body_path: ./messages.md 185 | draft: false 186 | prerelease: true 187 | 188 | - name: Trigger Build Android 189 | continue-on-error: true 190 | uses: benc-uk/workflow-dispatch@v1 191 | with: 192 | workflow: LedFx BuildPipeline Android 193 | repo: YeonV/LedFx-Builds 194 | token: ${{ secrets.GITHUB_TOKEN }} 195 | inputs: '{ "fversion": "${{ github.event.inputs.fversion}}", "release": "${{ startsWith(github.event.head_commit.message, ''Beta'') && ''No'' || ''Yes'' }}", "upload_url": "${{ steps.create_release.outputs.upload_url }}" }' 196 | 197 | - name: Output Release URL File 198 | if: ${{ env.IS_RELEASE == 'true' }} 199 | run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt 200 | 201 | - name: Save Release URL File for publish 202 | if: ${{ env.IS_RELEASE == 'true' }} 203 | uses: actions/upload-artifact@v4 204 | with: 205 | name: release_url 206 | path: release_url.txt 207 | 208 | - name: Check Inputs and Prepare Matrix 209 | id: set-matrix 210 | run: | 211 | echo windows: ${{ env.BUILD_WIN == 'true' }} 212 | echo ubuntu: ${{ env.BUILD_LINUX == 'true' }} 213 | echo macos: ${{ env.BUILD_OSX_X64 == 'true' }} 214 | 215 | os_list=() 216 | if [ "${{ env.BUILD_WIN == 'true' }}" = "true" ]; then 217 | os_list+=('windows-latest') 218 | fi 219 | if [ "${{ env.BUILD_LINUX == 'true' }}" = "true" ]; then 220 | os_list+=('ubuntu-latest') 221 | fi 222 | if [ "${{ env.BUILD_OSX_X64 == 'true' }}" = "true" ]; then 223 | os_list+=('macos-13') 224 | fi 225 | if [ "${{ env.BUILD_OSX_ARM64 == 'true' }}" = "true" ]; then 226 | os_list+=('macos-latest') 227 | fi 228 | 229 | matrix_json="{\"os\": [" 230 | for os in "${os_list[@]}"; do 231 | matrix_json+="\"$os\"," 232 | done 233 | matrix_json=${matrix_json%?} # remove trailing comma 234 | matrix_json+="], \"python-version\": [\"3.12\"]}" 235 | 236 | echo "$matrix_json" > matrix.json 237 | echo "matrix=$(cat matrix.json)" >> $GITHUB_OUTPUT 238 | 239 | build: 240 | needs: createrelease 241 | continue-on-error: true 242 | runs-on: ${{ matrix.os }} 243 | env: 244 | IS_RELEASE: ${{ github.event.inputs.release == 'Yes' && 'true' || 'false' }} 245 | IS_OSX_ARM64: ${{ startsWith(matrix.OS, 'macos-latest') }} 246 | IS_OSX_X64: ${{ startsWith(matrix.OS, 'macos-13') }} 247 | IS_WIN: ${{ startsWith(matrix.OS, 'windows') }} 248 | IS_LINUX: ${{ startsWith(matrix.OS, 'ubuntu') }} 249 | BUILD_OSX_ARM64: ${{ github.event.inputs.osxarm64 == 'true' && 'true' || 'false' }} 250 | BUILD_OSX_X64: ${{ github.event.inputs.macos == 'true' && 'true' || 'false' }} 251 | BUILD_WIN: ${{ github.event.inputs.windows == 'true' && 'true' || 'false' }} 252 | BUILD_LINUX: ${{ github.event.inputs.ubuntu == 'true' && 'true' || 'false' }} 253 | BINARY_NAME: "LedFx" # Default value 254 | action_state: "2.0" # Default value 255 | defaults: 256 | run: 257 | shell: bash -x {0} 258 | strategy: 259 | fail-fast: false 260 | matrix: ${{fromJson(needs.createrelease.outputs.matrix)}} 261 | steps: 262 | - name: Check out core from GitHub 263 | uses: actions/checkout@v4 264 | with: 265 | repository: LedFx/LedFx 266 | ref: main 267 | path: src 268 | 269 | - name: Check out tools from GitHub 270 | uses: actions/checkout@v4 271 | with: 272 | repository: YeonV/LedFx-Builds 273 | token: ${{ secrets.GITHUB_TOKEN }} 274 | ref: main 275 | path: src2 276 | 277 | - name: Delete old frontend 278 | uses: JesseTG/rm@2fb8f3b8a0e41fc222e7943b63306c602feb187e 279 | with: 280 | path: ./src/ledfx_frontend 281 | 282 | - name: get git version 283 | run: | 284 | cp ./src2/tools/cors.patch ./src/cors.patch 285 | cp ./src2/tools/sentry.patch ./src/sentry.patch 286 | cd src 287 | git rev-parse HEAD >> ledfx/git_version 288 | git apply cors.patch 289 | git apply sentry.patch 290 | cd .. 291 | 292 | - name: Get latest frontend 293 | if : ${{ env.IS_RELEASE == 'true' }} 294 | run: | 295 | curl -L --max-redirs 10 -o ledfx_frontend_v2.zip "https://github.com/YeonV/LedFx-Frontend-v2/releases/latest/download/ledfx_frontend_v2.zip" 296 | 297 | - name: Checkout frontend 298 | if: ${{ env.IS_RELEASE == 'false' }} 299 | uses: actions/checkout@v4 300 | with: 301 | repository: YeonV/LedFx-Frontend-v2 302 | token: ${{ secrets.GITHUB_TOKEN }} 303 | ref: main 304 | path: src3 305 | - name: Set up Node.js 306 | if: ${{ env.IS_RELEASE == 'false' }} 307 | uses: actions/setup-node@v4 308 | with: 309 | node-version: 20 310 | cache: 'yarn' 311 | cache-dependency-path: '**/yarn.lock' 312 | - name: Build frontend 313 | if: ${{ env.IS_RELEASE == 'false' }} 314 | run: | 315 | cd src3 316 | yarn 317 | npm version ${{ env.action_state }}.${{ github.event.inputs.fversion }} 318 | yarn build 319 | cd .. 320 | 321 | - name: Include new frontend non win 322 | if: ${{ env.IS_WIN == 'false' && env.IS_RELEASE == 'true' }} 323 | run: | 324 | unzip -o -u ledfx_frontend_v2.zip 325 | cp -rf ./ledfx_frontend_v2 ./src/ledfx_frontend 326 | ls ./src/ledfx_frontend 327 | 328 | - name: Include new frontend win 329 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' }} 330 | run: | 331 | unzip ledfx_frontend_v2.zip 332 | cp -r ./ledfx_frontend_v2 ./src/ledfx_frontend 333 | ls ./src/ledfx_frontend 334 | 335 | - name: Include new build frontend 336 | if: ${{ env.IS_RELEASE == 'false' }} 337 | run: | 338 | cp -r ./src3/build ./src/ledfx_frontend 339 | ls ./src/ledfx_frontend 340 | 341 | - name: Install uv 342 | uses: astral-sh/setup-uv@v5 343 | with: 344 | enable-cache: true 345 | cache-dependency-glob: "src/uv.lock" 346 | 347 | - name: Set up Python ${{ matrix.python-version }} 348 | run: uv python install ${{ matrix.python-version }} 349 | 350 | - name: Install build dependencies for osx 351 | if: ${{ env.IS_OSX_X64 == 'true' || env.IS_OSX_ARM64 == 'true' }} 352 | run: | 353 | brew install portaudio mbedtls@2 354 | 355 | - name: Setup mbedtls path for osx-arm64 356 | if: ${{ env.IS_OSX_ARM64 == 'true' || env.IS_OSX_X64 == 'true' }} 357 | run: | 358 | echo "/opt/homebrew/opt/mbedtls@2/bin" >> $GITHUB_PATH 359 | echo "LDFLAGS=-L/opt/homebrew/opt/mbedtls@2/lib" >> $GITHUB_ENV 360 | echo "CPPFLAGS=-I/opt/homebrew/opt/mbedtls@2/include" >> $GITHUB_ENV 361 | echo "PKG_CONFIG_PATH=/opt/homebrew/opt/mbedtls@2/lib/pkgconfig" >> $GITHUB_ENV 362 | 363 | - name: Get full Python version 364 | id: full-python-version 365 | run: echo version=$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") >> $GITHUB_OUTPUT 366 | 367 | - name: Enable long paths for git on Windows 368 | if: ${{ env.IS_WIN == 'true' }} 369 | run: git config --system core.longpaths true 370 | 371 | - name: Update Path for Windows 372 | if: ${{ env.IS_WIN == 'true' }} 373 | run: echo "$APPDATA\Python\Scripts" >> $GITHUB_PATH 374 | 375 | - name: Update Path for non-Windows 376 | if: ${{ env.IS_WIN == 'false' }} 377 | run: echo "$HOME/.local/bin" >> $GITHUB_PATH 378 | 379 | - name: Bump version 380 | if: ${{ env.IS_WIN == 'true' || env.IS_LINUX == 'true' }} 381 | run: | 382 | sed -i '0,/PROJECT_VERSION = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//PROJECT_VERSION = "\1.\2.${{ github.event.inputs.fversion }}"/' ./src/ledfx/consts.py 383 | sed -i '0,/version = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//version = "\1.\2.${{ github.event.inputs.fversion }}"/' ./src/pyproject.toml 384 | new_version=$(sed -n 's/.*PROJECT_VERSION = "\([0-9]*\.[0-9]*\.[0-9]*\(-[a-z0-9]*\)*\)".*/\1/p' ./src/ledfx/consts.py) 385 | echo "action_state=$new_version" >> $GITHUB_ENV 386 | BINARY_NAME=LedFx_core- 387 | echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV 388 | 389 | - name: Bump version osx 390 | if: ${{ env.IS_OSX_X64 == 'true' || env.IS_OSX_ARM64 == 'true' }} 391 | run: | 392 | brew install gnu-sed 393 | cd src 394 | gsed -i '0,/PROJECT_VERSION = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//PROJECT_VERSION = "\1.\2.${{ github.event.inputs.fversion }}"/' ./ledfx/consts.py 395 | gsed -i '0,/version = "\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\(-[a-z0-9]*\)*"/s//version = "\1.\2.${{ github.event.inputs.fversion }}"/' ./pyproject.toml 396 | new_version=$(gsed -n 's/.*PROJECT_VERSION = "\([0-9]*\.[0-9]*\.[0-9]*\(-[a-z0-9]*\)*\)".*/\1/p' ./ledfx/consts.py) 397 | echo "action_state=$new_version" >> $GITHUB_ENV 398 | BINARY_NAME=LedFx_core- 399 | echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_ENV 400 | 401 | - name: Install LedFx 402 | if: ${{ env.IS_LINUX == 'true' || env.IS_WIN == 'true' }} 403 | run: | 404 | cd src 405 | uv sync --python ${{ matrix.python-version }} --extra hue --dev 406 | cd .. 407 | 408 | - name: Install LedFx osx 409 | if: ${{ env.IS_OSX_X64 == 'true' || env.IS_OSX_ARM64 == 'true' }} 410 | run: | 411 | cd src 412 | export PATH="/opt/homebrew/opt/mbedtls@2/bin:$PATH" 413 | export LDFLAGS="-L/opt/homebrew/opt/mbedtls@2/lib" 414 | export CPPFLAGS="-I/opt/homebrew/opt/mbedtls@2/include" 415 | export CFLAGS="-Wno-incompatible-function-pointer-types" 416 | uv sync --python ${{ matrix.python-version }} --extra hue --dev 417 | cd .. 418 | 419 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} win 420 | if: ${{ env.IS_WIN == 'true' }} 421 | run: | 422 | mv src2/tools/win/win.spec src/win.spec 423 | cd src 424 | uv run pyinstaller windows-binary.spec 425 | rm dist/LedFx/_internal/_sounddevice_data/portaudio-binaries/libportaudio64bit.dll 426 | mv loopback/libportaudio64bit.dll dist/LedFx/_internal/_sounddevice_data/portaudio-binaries/libportaudio64bit.dll 427 | mv dist/LedFx $BINARY_NAME-v$action_state 428 | 7z.exe a -tzip $BINARY_NAME-v$action_state--win.zip $BINARY_NAME-v$action_state "-mx5" "-xr!.git" "-xr!.github" 429 | 430 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} osx-x64 431 | if: ${{ env.IS_OSX_X64 == 'true' }} 432 | run: | 433 | mv src2/tools/mac/mac.spec src/mac.spec 434 | cd src 435 | ls 436 | uv run pyinstaller mac.spec 437 | cd dist/ && mkdir LedFx && chmod +x ./LedFx_v2/Contents/MacOS/LedFx_v2 && mkdir -p ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/ && cp -rf ../../src2/tools/mac/libsamplerate-x86-x64.dylib ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/libsamplerate.dylib && mv ./LedFx_v2 ./LedFx/LedFx.app 438 | cd .. 439 | rm -rf ./LedFx.app 440 | mv ./dist/LedFx/LedFx.app ./LedFx.app 441 | xattr -cr ./LedFx.app 442 | tar -czf my_files.tar ./LedFx.app 443 | 444 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} osx-arm64 445 | if: ${{ env.IS_OSX_ARM64 == 'true' }} 446 | run: | 447 | mv src2/tools/mac/mac-arm64.spec src/mac.spec 448 | cd src 449 | ls 450 | uv run pyinstaller mac.spec 451 | cd dist/ && mkdir LedFx && chmod +x ./LedFx_v2/Contents/MacOS/LedFx_v2 && mkdir -p ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/ && cp -rf ../../src2/tools/mac/libsamplerate-arm64.dylib ./LedFx_v2/Contents/Frameworks/samplerate/_samplerate_data/libsamplerate.dylib && mv ./LedFx_v2 ./LedFx/LedFx.app 452 | cd .. 453 | rm -rf ./LedFx.app 454 | mv ./dist/LedFx/LedFx.app ./LedFx.app 455 | tar -czf my_files.tar ./LedFx.app 456 | 457 | - name: Build ${{ env.BINARY_NAME }}${{ env.action_state }} linux 458 | if: ${{ env.IS_LINUX == 'true' }} 459 | run: | 460 | sudo apt-get update && sudo apt-get install -y \ 461 | gcc libatlas3-base portaudio19-dev 462 | sudo apt install pulseaudio 463 | mv src2/tools/linux/yzlinux.spec src/linux.spec 464 | cd src 465 | ls 466 | uv run pyinstaller linux.spec 467 | cd dist && mkdir LedFx-linux && mv ./LedFx ./LedFx-linux/LedFx && cd .. 468 | cd .. 469 | cd src/dist && ls && tar -czf LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz ./LedFx-linux 470 | 471 | 472 | 473 | 474 | 475 | - name: Load Release URL File from release job 476 | if: ${{ env.IS_RELEASE == 'true' }} 477 | uses: actions/download-artifact@v4 478 | with: 479 | name: release_url 480 | 481 | - name: Get Release File Name & Upload URL 482 | if: ${{ env.IS_RELEASE == 'true' }} 483 | id: get_release_info 484 | shell: bash 485 | run: | 486 | value=`cat release_url.txt` 487 | echo "upload_url=$value" >> $GITHUB_OUTPUT 488 | 489 | - name: Load Frontend Build File from release job 490 | if: ${{ env.IS_WIN == 'true' }} 491 | uses: actions/download-artifact@v4 492 | with: 493 | name: ledfx_frontend_v2 494 | 495 | - name: Upload Frontend Build to Release 496 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' }} 497 | id: upload-release-asset-2 498 | uses: actions/upload-release-asset@v1 499 | env: 500 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 501 | with: 502 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 503 | asset_path: ./ledfx_frontend_v2.zip 504 | asset_name: ledfx_frontend-v${{ env.action_state }}.zip 505 | asset_content_type: application/zip 506 | 507 | - name: Upload Frontend Build to Workflow 508 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' }} 509 | uses: actions/upload-artifact@v4 510 | with: 511 | name: ledfx_frontend-v${{ env.action_state }}.zip 512 | path: ledfx_frontend_v2/ledfx_frontend_v2.zip 513 | 514 | - name: Upload Core Win To Release 515 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' && env.BUILD_WIN == 'true' }} 516 | uses: YeonV/upload-release-asset@v1 517 | env: 518 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 519 | with: 520 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 521 | asset_path: src/${{ env.BINARY_NAME }}-v${{ env.action_state }}--win.zip 522 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win.zip 523 | asset_content_type: application/zip 524 | 525 | - name: Upload Core Win To Workflow 526 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' && env.BUILD_WIN == 'true' }} 527 | uses: actions/upload-artifact@v4 528 | with: 529 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win.zip 530 | path: src/${{ env.BINARY_NAME }}-v${{ env.action_state }}--win.zip 531 | 532 | - name: Upload Core Osx-arm64 To Release 533 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_ARM64 == 'true' }} 534 | uses: YeonV/upload-release-asset@v1 535 | env: 536 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 537 | with: 538 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 539 | asset_path: src/my_files.tar 540 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-arm64.zip 541 | asset_content_type: application/zip 542 | 543 | - name: Upload Core Osx-arm64 to Workflow 544 | if: ${{env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_ARM64 == 'true' }} 545 | uses: actions/upload-artifact@v4 546 | with: 547 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-arm64.zip 548 | path: src/my_files.tar 549 | 550 | - name: Upload Core Osx To Release 551 | if: ${{env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_X64 == 'true' }} 552 | uses: YeonV/upload-release-asset@v1 553 | env: 554 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 555 | with: 556 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 557 | asset_path: src/my_files.tar 558 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-x64.zip 559 | asset_content_type: application/zip 560 | 561 | - name: Upload Core Osx to Workflow 562 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_X64 == 'true' }} 563 | uses: actions/upload-artifact@v4 564 | with: 565 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--osx-x64.zip 566 | path: src/my_files.tar 567 | 568 | - name: Build ${{ env.BINARY_NAME }} portable ${{ env.action_state }} 569 | if: ${{ env.IS_WIN == 'true' }} 570 | run: | 571 | cp src2/tools/win/yzwin.spec ./src/win-portable.spec 572 | cd src 573 | uv run pyinstaller win-portable.spec 574 | ls dist/ 575 | mv dist/LedFx.exe dist/$BINARY_NAME-v$action_state--win-portable.exe 576 | 577 | - name: Upload Core Linux To Release 578 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'true' && env.BUILD_LINUX == 'true' }} 579 | continue-on-error: true 580 | uses: YeonV/upload-release-asset@v1 581 | env: 582 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 583 | with: 584 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 585 | asset_path: src/dist/LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz 586 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--linux-x64.tar.gz 587 | asset_content_type: application/gzip 588 | 589 | - name: Upload Core Linux To Worflow 590 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'false' && env.BUILD_LINUX == 'true' }} 591 | uses: actions/upload-artifact@v4 592 | with: 593 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--linux-x64.tar.gz 594 | path: src/dist/LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz 595 | 596 | - name: Upload Core Win Portable To Release 597 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' && env.BUILD_WIN == 'true' }} 598 | uses: YeonV/upload-release-asset@v1 599 | env: 600 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 601 | with: 602 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 603 | asset_path: src\dist\${{ env.BINARY_NAME }}-v${{ env.action_state }}--win-portable.exe 604 | asset_name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win-portable.exe 605 | asset_content_type: application/vnd.microsoft.portable-executable 606 | 607 | - name: Upload Core Win Portable To Worflow 608 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' && env.BUILD_WIN == 'true' }} 609 | uses: actions/upload-artifact@v4 610 | with: 611 | name: ${{ env.BINARY_NAME }}v${{ env.action_state }}--win-portable.exe 612 | path: src\dist\${{ env.BINARY_NAME }}-v${{ env.action_state }}--win-portable.exe 613 | 614 | # CLIENTS 615 | - uses: actions/checkout@v4 616 | with: 617 | repository: YeonV/LedFx-Frontend-v2 618 | ref: main 619 | path: frontend 620 | 621 | - name: Move Core-win 622 | continue-on-error: true 623 | if: ${{ env.IS_WIN == 'true' && env.BUILD_WIN == 'true' }} 624 | run: | 625 | ls ./src 626 | echo ------------ 627 | ls ./src/LedFx_core--v${{ env.action_state }} 628 | echo ------------ 629 | ls ./src/dist 630 | echo ------------ 631 | cp -r ./src/LedFx_core--v${{ env.action_state }}/ ./frontend/extraResources/LedFx/ && 632 | ls ./frontend/extraResources/LedFx 633 | 634 | - name: Move Core-osx 635 | if: ${{ (env.IS_OSX_X64 == 'true' || env.IS_OSX_ARM64 == 'true') && (env.BUILD_OSX_ARM64 == 'true' || env.BUILD_OSX_X64 == 'true') }} 636 | continue-on-error: true 637 | run: | 638 | cp -r ./src/LedFx.app ./frontend/extraResources/LedFx_core.app 639 | echo ------------ 640 | ls ./frontend/extraResources 641 | 642 | - name: Move Core Linux 643 | if: ${{ env.IS_LINUX == 'true' && env.BUILD_LINUX == 'true' }} 644 | continue-on-error: true 645 | run: | 646 | ls 647 | cp -r ./src/dist/LedFx-linux/LedFx ./frontend/extraResources/LedFx 648 | echo ------------ 649 | ls ./frontend/extraResources 650 | 651 | - name: Set up Node.js 652 | if: ${{ env.IS_OSX_ARM64 == 'false' }} 653 | uses: actions/setup-node@v4 654 | with: 655 | node-version: 20 656 | cache: 'yarn' 657 | cache-dependency-path: '**/yarn.lock' 658 | # architecture: ${{ matrix.arch }} 659 | 660 | - name: Set up Node.js osx-arm64 661 | if: ${{ env.IS_OSX_ARM64 == 'true' }} 662 | uses: actions/setup-node@v4 663 | with: 664 | node-version: 20 665 | architecture: arm64 666 | cache: 'yarn' 667 | cache-dependency-path: '**/yarn.lock' 668 | 669 | - name: Disable CI checks 670 | run: echo "CI=false" >> $GITHUB_ENV 671 | - name: Building Clients 672 | run: | 673 | cd frontend && npm config set legacy-peer-deps true && npm remove electron -g && npm remove electron-builder -g && npm i -D electron electron-builder && npm install --force && npm install postcss && npm run distall 674 | env: 675 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 676 | 677 | - name: Load Release URL File from release job 678 | if: ${{ env.IS_RELEASE == 'true' }} 679 | uses: actions/download-artifact@v4 680 | with: 681 | name: release_url 682 | 683 | - name: Upload Win-Portable to Release 684 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' && env.BUILD_WIN == 'true' }} 685 | id: upload-release-asset-portable 686 | uses: YeonV/upload-release-asset@v1 687 | env: 688 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 689 | with: 690 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 691 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-portable.exe 692 | asset_name: LedFx_client-v${{ env.action_state }}--win-portable.exe 693 | asset_content_type: application/vnd.microsoft.portable-executable 694 | 695 | - name: Upload Win-Portable to Workflow 696 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' && env.BUILD_WIN == 'true' }} 697 | uses: actions/upload-artifact@v4 698 | with: 699 | name: LedFx_client-v${{ env.action_state }}--win-portable.exe 700 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-portable.exe 701 | 702 | - name: Upload Win-Setup to Release 703 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' && env.BUILD_WIN == 'true' }} 704 | id: upload-release-asset-setup 705 | uses: YeonV/upload-release-asset@v1 706 | env: 707 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 708 | with: 709 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 710 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-setup.exe 711 | asset_name: LedFx_client-v${{ env.action_state }}--win-setup.exe 712 | asset_content_type: application/vnd.microsoft.portable-executable 713 | 714 | - name: Upload Win-Setup to Workflow 715 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' && env.BUILD_WIN == 'true' }} 716 | uses: actions/upload-artifact@v4 717 | with: 718 | name: LedFx_client-v${{ env.action_state }}--win-setup.exe 719 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win-setup.exe 720 | 721 | - name: Upload Win-Zip to Release 722 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' && env.BUILD_WIN == 'true' }} 723 | id: upload-release-asset-zip 724 | uses: YeonV/upload-release-asset@v1 725 | env: 726 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 727 | with: 728 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 729 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win.zip 730 | asset_name: LedFx_client-v${{ env.action_state }}--win.zip 731 | asset_content_type: application/zip 732 | 733 | - name: Upload Win-Zip to Workflow 734 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' && env.BUILD_WIN == 'true' }} 735 | uses: actions/upload-artifact@v4 736 | with: 737 | name: LedFx_client-v${{ env.action_state }}--win.zip 738 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--win.zip 739 | 740 | - name: Upload Win-CC to Release 741 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' && env.BUILD_WIN == 'true' }} 742 | id: upload-release-asset-cc 743 | uses: YeonV/upload-release-asset@v1 744 | env: 745 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 746 | with: 747 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 748 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--win-setup.exe 749 | asset_name: LedFx_CC-v${{ env.action_state }}--win-setup.exe 750 | asset_content_type: application/vnd.microsoft.portable-executable 751 | 752 | - name: Upload Win-CC to Workflow 753 | if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' && env.BUILD_WIN == 'true' }} 754 | uses: actions/upload-artifact@v4 755 | with: 756 | name: LedFx_CC-v${{ env.action_state }}--win-setup.exe 757 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--win-setup.exe 758 | 759 | - name: Upload OSX-arm64-Client dmg to Release 760 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_ARM64 == 'true' }} 761 | uses: YeonV/upload-release-asset@v1 762 | env: 763 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 764 | with: 765 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 766 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 767 | asset_name: LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 768 | asset_content_type: application/octet-stream 769 | 770 | - name: Upload OSX-arm64-Client dmg to Workflow 771 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_ARM64 == 'true' }} 772 | uses: actions/upload-artifact@v4 773 | with: 774 | name: LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 775 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.dmg 776 | 777 | - name: Upload OSX-arm64-Client zip to Release 778 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_ARM64 == 'true' }} 779 | uses: YeonV/upload-release-asset@v1 780 | env: 781 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 782 | with: 783 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 784 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.zip 785 | asset_name: LedFx_client-v${{ env.action_state }}--mac-arm64.zip 786 | asset_content_type: application/zip 787 | 788 | - name: Upload OSX-arm64-Client zip to Workflow 789 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_ARM64 == 'true' }} 790 | uses: actions/upload-artifact@v4 791 | with: 792 | name: LedFx_client-v${{ env.action_state }}--mac-arm64.zip 793 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-arm64.zip 794 | 795 | - name: Upload OSX-arm64-CC dmg to Release 796 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_ARM64 == 'true' }} 797 | uses: YeonV/upload-release-asset@v1 798 | env: 799 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 800 | with: 801 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 802 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 803 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 804 | asset_content_type: application/octet-stream 805 | 806 | - name: Upload OSX-arm64-CC dmg to Workflow 807 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_ARM64 == 'true' }} 808 | uses: actions/upload-artifact@v4 809 | with: 810 | name: LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 811 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg 812 | 813 | - name: Upload OSX-arm64-CC zip to Release 814 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_ARM64 == 'true' }} 815 | uses: YeonV/upload-release-asset@v1 816 | env: 817 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 818 | with: 819 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 820 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 821 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 822 | asset_content_type: application/zip 823 | 824 | - name: Upload OSX-arm64-CC zip to Workflow 825 | if: ${{ env.IS_OSX_ARM64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_ARM64 == 'true' }} 826 | uses: actions/upload-artifact@v4 827 | with: 828 | name: LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 829 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-arm64.zip 830 | 831 | - name: Upload Linux Client snap to Release 832 | continue-on-error: true 833 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'true' && env.BUILD_LINUX == 'true' }} 834 | uses: YeonV/upload-release-asset@v1 835 | env: 836 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 837 | with: 838 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 839 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.snap 840 | asset_name: LedFx_client-v${{ env.action_state }}--linux-amd64.snap 841 | asset_content_type: application/octet-stream 842 | 843 | - name: Upload Linux Client snap to Workflow 844 | continue-on-error: true 845 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'false' && env.BUILD_LINUX == 'true' }} 846 | uses: actions/upload-artifact@v4 847 | with: 848 | name: LedFx_client-v${{ env.action_state }}--linux-amd64.snap 849 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.snap 850 | 851 | - name: Upload Linux Client AppImage to Release 852 | continue-on-error: true 853 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'true' && env.BUILD_LINUX == 'true' }} 854 | uses: YeonV/upload-release-asset@v1 855 | env: 856 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 857 | with: 858 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 859 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.AppImage 860 | asset_name: LedFx_client-v${{ env.action_state }}--linux-amd64.AppImage 861 | asset_content_type: application/octet-stream 862 | 863 | - name: Upload Linux Client AppImage to Workflow 864 | continue-on-error: true 865 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'false' && env.BUILD_LINUX == 'true' }} 866 | uses: actions/upload-artifact@v4 867 | with: 868 | name: LedFx_client-v${{ env.action_state }}--linux-amd64.AppImage 869 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--linux.AppImage 870 | 871 | - name: Upload Linux CC snap to Release 872 | continue-on-error: true 873 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'true' && env.BUILD_LINUX == 'true' }} 874 | uses: YeonV/upload-release-asset@v1 875 | env: 876 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 877 | with: 878 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 879 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.snap 880 | asset_name: LedFx_CC-v${{ env.action_state }}--linux-amd64.snap 881 | asset_content_type: application/octet-stream 882 | 883 | - name: Upload Linux CC snap to Workflow 884 | continue-on-error: true 885 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'false' && env.BUILD_LINUX == 'true' }} 886 | uses: actions/upload-artifact@v4 887 | with: 888 | name: LedFx_CC-v${{ env.action_state }}--linux-amd64.snap 889 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.snap 890 | 891 | - name: Upload Linux CC AppImage to Release 892 | continue-on-error: true 893 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'true' && env.BUILD_LINUX == 'true' }} 894 | uses: YeonV/upload-release-asset@v1 895 | env: 896 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 897 | with: 898 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 899 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.AppImage 900 | asset_name: LedFx_CC-v${{ env.action_state }}--linux-amd64.AppImage 901 | asset_content_type: application/octet-stream 902 | 903 | - name: Upload Linux CC AppImage to Workflow 904 | continue-on-error: true 905 | if: ${{ env.IS_LINUX == 'true' && env.IS_RELEASE == 'false' && env.BUILD_LINUX == 'true' }} 906 | uses: actions/upload-artifact@v4 907 | with: 908 | name: LedFx_CC-v${{ env.action_state }}--linux-amd64.AppImage 909 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--linux.AppImage 910 | 911 | - name: Upload OSX-x64-Client dmg to Release 912 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_X64 == 'true' }} 913 | uses: YeonV/upload-release-asset@v1 914 | env: 915 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 916 | with: 917 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 918 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.dmg 919 | asset_name: LedFx_client-v${{ env.action_state }}--mac-x64.dmg 920 | asset_content_type: application/octet-stream 921 | 922 | - name: Upload OSX-x64-Client dmg to Workflow 923 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_X64 == 'true' }} 924 | uses: actions/upload-artifact@v4 925 | with: 926 | name: LedFx_client-v${{ env.action_state }}--mac-x64.dmg 927 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.dmg 928 | 929 | - name: Upload OSX-x64-Client zip to Release 930 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_X64 == 'true' }} 931 | uses: YeonV/upload-release-asset@v1 932 | env: 933 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 934 | with: 935 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 936 | asset_path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.zip 937 | asset_name: LedFx_client-v${{ env.action_state }}--mac-x64.zip 938 | asset_content_type: application/zip 939 | 940 | - name: Upload OSX-x64-Client zip to Workflow 941 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_X64 == 'true' }} 942 | uses: actions/upload-artifact@v4 943 | with: 944 | name: LedFx_client-v${{ env.action_state }}--mac-x64.zip 945 | path: ./frontend/dist/LedFx_client-v${{ env.action_state }}--mac-x64.zip 946 | 947 | - name: Upload OSX-x64-CC dmg to Release 948 | continue-on-error: true 949 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_X64 == 'true' }} 950 | uses: YeonV/upload-release-asset@v1 951 | env: 952 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 953 | with: 954 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 955 | 956 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 957 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 958 | asset_content_type: application/octet-stream 959 | 960 | - name: Upload OSX-x64-CC dmg to Workflow 961 | continue-on-error: true 962 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_X64 == 'true' }} 963 | uses: actions/upload-artifact@v4 964 | with: 965 | name: LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 966 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.dmg 967 | 968 | - name: Upload OSX-x64-CC zip to Release 969 | continue-on-error: true 970 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'true' && env.BUILD_OSX_X64 == 'true' }} 971 | uses: YeonV/upload-release-asset@v1 972 | env: 973 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 974 | with: 975 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 976 | asset_path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.zip 977 | asset_name: LedFx_CC-v${{ env.action_state }}--mac-x64.zip 978 | asset_content_type: application/zip 979 | 980 | - name: Upload OSX-x64-CC zip to Workflow 981 | continue-on-error: true 982 | if: ${{ env.IS_OSX_X64 == 'true' && env.IS_RELEASE == 'false' && env.BUILD_OSX_X64 == 'true' }} 983 | uses: actions/upload-artifact@v4 984 | with: 985 | name: LedFx_CC-v${{ env.action_state }}--mac-x64.zip 986 | path: ./frontend/dist/LedFx_CC-v${{ env.action_state }}--mac-x64.zip 987 | 988 | # - name: Send Discord Release Post 989 | # if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'true' }} 990 | # run: | 991 | # curl -H "Content-Type: application/json" -d '{"content": "**[DOWNLOAD]** https://github.com/YeonV/LedFx-Builds/releases/tag/v${{ env.action_state }}\n\n**[PREVIEW]** **Please** do not send messages here. Use the [testing]-Post instead!", "thread_name": "[beta] Release 2.0.${{ github.event.inputs.fversion }}"}' ${{ secrets.DISCORD_RELEASE_WEBHOOK }} 992 | # curl -H "Content-Type: application/json" -d '{"content": "https://github.com/YeonV/LedFx-Builds/releases/tag/v${{ env.action_state }}", "thread_name": "[testing] Release 2.0.${{ github.event.inputs.fversion }}"}' ${{ secrets.DISCORD_RELEASE_WEBHOOK }} 993 | # 994 | # - name: Send Discord Beta Post 995 | # if: ${{ env.IS_WIN == 'true' && env.IS_RELEASE == 'false' }} 996 | # run: | 997 | # curl -H "Content-Type: application/json" -X POST -d "{\"content\":\"New Beta-Binaries available\n**DOWNLOAD:** https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n\n:regional_indicator_a: LedFx_core-v${{ env.action_state }}--win.zip\n:regional_indicator_b: LedFx_CC-v${{ env.action_state }}--linux-amd64.snap\n:regional_indicator_c: LedFx_CC-v${{ env.action_state }}--mac-arm64.dmg\n:regional_indicator_d: LedFx_CC-v${{ env.action_state }}--mac-arm64.zip\n:regional_indicator_e: LedFx_CC-v${{ env.action_state }}--mac-x64.dmg\n:regional_indicator_f: LedFx_CC-v${{ env.action_state }}--mac-x64.zip\n:regional_indicator_g: LedFx_CC-v${{ env.action_state }}--win-setup.exe\n:regional_indicator_h: LedFx_client-v${{ env.action_state }}--linux-amd64.AppImage\n:regional_indicator_i: LedFx_client-v${{ env.action_state }}--linux-amd64.snap\n:regional_indicator_j: LedFx_client-v${{ env.action_state }}--mac-arm64.dmg\n:regional_indicator_k: LedFx_client-v${{ env.action_state }}--mac-arm64.zip\n:regional_indicator_l: LedFx_client-v${{ env.action_state }}--mac-x64.dmg\n:regional_indicator_m: LedFx_client-v${{ env.action_state }}--mac-x64.zip\n:regional_indicator_o: LedFx_client-v${{ env.action_state }}--win-portable.exe\n:regional_indicator_p: LedFx_client-v${{ env.action_state }}--win-setup.exe\n:regional_indicator_q: LedFx_client-v${{ env.action_state }}--win.zip\n:regional_indicator_r: LedFx_core-v${{ env.action_state }}--linux-x64.tar.gz\n:regional_indicator_s: LedFx_core-v${{ env.action_state }}--osx-arm64.zip\n:regional_indicator_t: LedFx_core-v${{ env.action_state }}--osx-x64.zip\n:regional_indicator_u: LedFx_core-v${{ env.action_state }}--win-portable.exe\n:regional_indicator_v: LedFx_CC-v${{ env.action_state }}--linux-amd64.AppImage\"}" https://discord.com/api/webhooks/1196958406234345522/zSejZjvGh2rWdAIyIp3IL-8W-yXniX4bsXNxHi9Mn6QmlbhCThWPSDYoLT_PO5a2WQAb 998 | # curl -H "Content-Type: application/json" -X POST -d "{\"content\":\"======================================\n**NOT WORKING**\"}" https://discord.com/api/webhooks/1196958406234345522/zSejZjvGh2rWdAIyIp3IL-8W-yXniX4bsXNxHi9Mn6QmlbhCThWPSDYoLT_PO5a2WQAb 999 | # curl -H "Content-Type: application/json" -X POST -d "{\"content\":\"======================================\n**WORKING**\"}" https://discord.com/api/webhooks/1196958406234345522/zSejZjvGh2rWdAIyIp3IL-8W-yXniX4bsXNxHi9Mn6QmlbhCThWPSDYoLT_PO5a2WQAb 1000 | 1001 | -------------------------------------------------------------------------------- /.github/workflows/__BuildPipeline.yml_OFF: -------------------------------------------------------------------------------- 1 | name: LedFx BuildPipeline 2 | 3 | on: 4 | workflow_dispatch: 5 | # Inputs the workflow accepts. 6 | inputs: 7 | fversion: 8 | description: 'Frontend Version' 9 | default: '69' 10 | required: false 11 | 12 | jobs: 13 | createrelease: 14 | name: Create Release 15 | runs-on: [ubuntu-latest] 16 | steps: 17 | - name: Get latest frontend 18 | run: | 19 | curl -L --max-redirs 10 -o ledfx_frontend_v2.zip "https://github.com/YeonV/LedFx-Frontend-v2/releases/latest/download/ledfx_frontend_v2.zip" 20 | - name: Save Frontend for publish 21 | uses: actions/upload-artifact@v3 22 | with: 23 | name: ledfx_frontend_v2 24 | path: ledfx_frontend_v2.zip 25 | - name: Get Messages 26 | run: | 27 | unzip -p ledfx_frontend_v2.zip ledfx_frontend_v2/messages.md >message.md 28 | echo "## New LedFx binaries available: 29 | 30 | ### Core: -- Browser-Based 31 | ### Client: -- Desktop-App (needs a running Core) 32 | ### CC: -- Desktop-App (Core-integrated) 33 | 34 | --- 35 | 36 | ## More informations regarding Core, Client and CC: 37 | 38 |
expand 39 | 40 | #### Core 41 | If you don't know where to start, get this, open an internet browser, go to https://localhost:8888/ and off you go. 42 | This is the server/backend that takes in audio, does the calculations and outputs blinking lights. Runs in the background on a Windows/Mac/Linux computer. You can then open the frontend in an internet browser, by going to https://localhost:8888/ on the same computer that is running the Core. 43 | You can also pull up the frontend on your smartphone (or any other computer on the same network) by finding out what local IP your computer running the Core uses (most likely something like this 192.168.1.XXX, or 192.168.0.XXX) and opening a Browser on your smartphone and going to eg. https://192.168.1.123:8888/ 44 | 45 | 46 | #### Client 47 | This is a Desktop App that opens the frontend of LedFx in a window on your desktop. 48 | This app does NOT include the LedFx backend/server and cannot run LedFx by itself without the Core. 49 | This Client app is useful for connecting to a running Core on your network (or the same machine). 50 | 51 | ### CC (Client + Core = CC) 52 | This is the Client and Core integrated into one Desktop App. 53 | This Desktop App opens the Client frontend of LedFx in a window on your desktop AND runs the Core backend/server in the background. 54 | This is useful for people who want the whole LedFx experience in one nice and tidy package. 55 | With this, you can still connect to the backend server via a Client or browser. 56 | 57 |
58 | 59 | --- 60 | 61 | ## ⚠️ These builds are not signed (read this please): 62 | 63 |
Mac-Users: 64 | 65 | #### Infos: 66 | Reports as damaged, because of unsiged. 67 | To fix it open Terminal and type in the following (with a SPACE at the end): 68 | 69 | ```sudo xattr -cr ``` 70 | 71 | Then drag'n'drop the LedFx.app File into the terminal and hit enter -> it should ask for sudo password 72 | 73 | Now you can open the App normally, give microphone and network permission, and you can even drag it into your applications. 74 | Maybe at some point we might buy an apple dev-license for 99€/year, then the voodoo would not be needed anymore. 75 | 76 |
77 | 78 | 79 |
Win-Users: 80 | 81 | #### Infos: 82 | Reports as unsave, because of unsiged. 83 | 84 | Maybe at some point we might buy a microsoft dev-license 85 | 86 |
87 | 88 | ## Changes 89 | 90 |
Expand 91 | " >> ./messages.md 92 | cat ./message.md >> ./messages.md 93 | echo " 94 |
95 | " >> ./messages.md 96 | - uses: actions/checkout@v3 97 | with: 98 | repository: LedFx/LedFx 99 | ref: main 100 | path: backend 101 | - name: Get Backendver 102 | id: getbackendver 103 | run: | 104 | cd backend/ledfx 105 | echo "action_state=$(python3 consts.py | cut -d- -f1 | cut -d. -f1,2)" >> $GITHUB_ENV 106 | echo " 107 |
Expand 108 | " >> ./messages.md 109 | git log --pretty=format:"+ %s [\![by](https://img.shields.io/badge/by-$(echo '%an' | sed 's/ /_/g')-blue.svg?logo=github&logoColor=white)](https://github.com/LedFx/LedFx/commit/%h)" $(git describe --tags --abbrev=0 @^)..@ | grep -v -E '(cleanup)' | awk '{ sub(/\[\[!\]\]/, ""); msg = substr($0, 1, index($0, "[!") - 1); if (length(msg) >= 5 && !seen[msg]++) { print $0 } }' | awk '{ while (match($0, /https:\/\/img\.shields\.io\/badge\/by-[^"]*-blue\.svg\?logo=github&logoColor=white/)) { url = substr($0, RSTART, RLENGTH); gsub(" ", "_", url); printf "%s%s", substr($0, 1, RSTART - 1), url; $0 = substr($0, RSTART + RLENGTH) } gsub(" ", "_", $0); print }' >> ./messages.md 110 | echo " 111 |
112 | " >> ./messages.md 113 | - name: Create Release 114 | id: create_release 115 | uses: actions/create-release@v1 116 | env: 117 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 118 | with: 119 | tag_name: v${{ env.action_state || '2.0' }}.${{ github.event.inputs.fversion }} 120 | #tag_name: v2.0.${{ github.event.inputs.fversion }} 121 | release_name: Release v${{ env.action_state || '2.0'}}.${{ github.event.inputs.fversion }} 122 | body_path: ./messages.md 123 | draft: false 124 | prerelease: false 125 | - name: Output Release URL File 126 | run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt 127 | - name: Save Release URL File for publish 128 | uses: actions/upload-artifact@v3 129 | with: 130 | name: release_url 131 | path: release_url.txt 132 | 133 | core: 134 | name: Build ${{ matrix.runtime }} 135 | needs: createrelease 136 | # if: ${{ github.event.inputs.core == 'true' }} 137 | runs-on: ${{ matrix.os }} 138 | strategy: 139 | fail-fast: false 140 | matrix: 141 | include: 142 | - os: ubuntu-latest 143 | continue-on-error: true 144 | # if: ${{ github.event.inputs.linux == 'true' }} 145 | TARGET: ubuntu 146 | runtime: linux-x64 147 | CMD_DEP: | 148 | sudo apt install libatlas3-base \ 149 | libavformat58 \ 150 | portaudio19-dev \ 151 | pulseaudio 152 | cp src2/tools/linux/yzlinux.spec src/linux.spec 153 | cd src 154 | curl -sSL https://install.python-poetry.org | python - -y 155 | echo "$HOME/.local/bin" >> $GITHUB_PATH 156 | poetry install 157 | poetry run pip install pyinstaller 158 | poetry run pip install mido 159 | CMD_BUILD: > 160 | cd src && poetry run pyinstaller linux.spec && cd dist && mkdir LedFx-linux && mv ./LedFx ./LedFx-linux/LedFx && cd .. 161 | CMD_PACK: cd src/dist && ls && tar -czf LedFx_core-v2.0.${{ github.event.inputs.fversion }}--linux-x64.tar.gz ./LedFx-linux && mv LedFx_core-v2.0.${{ github.event.inputs.fversion }}--linux-x64.tar.gz ../../ 162 | ASSET_NAME: LedFx_core-v2.0.${{ github.event.inputs.fversion }}--linux-x64.tar.gz 163 | ASSET_PATH: ./LedFx_core-v2.0.${{ github.event.inputs.fversion }}--linux-x64.tar.gz 164 | ASSET_MIME: application/gzip 165 | # ASSET_NAME2: LedFx-notray--linux-x64.zip 166 | # ASSET_PATH2: ./LedFx-notray--linux-x64.zip 167 | # ASSET_MIME2: application/zip 168 | # ASSET_NAME3: LedFx-notray--linux-x64.tar.gz 169 | # ASSET_PATH3: ./LedFx-notray--linux-x64.tar.gz 170 | # ASSET_MIME3: application/gzip 171 | 172 | arch: x64 173 | 174 | - os: macos-latest 175 | continue-on-error: true 176 | # if: ${{ github.event.inputs.mac == 'true' }} 177 | runtime: osx-x64 178 | TARGET: macos 179 | CMD_DEP: | 180 | brew install portaudio pulseaudio 181 | # python3 -m pip install --upgrade pip 182 | # python3 -m pip install --upgrade wheel 183 | cp src2/tools/mac/mac.spec src/mac.spec 184 | #cp src2/tools/mac/aubio-0.4.9-cp39-cp39-macosx_10_9_x86_64.whl src/aubio-0.4.9-cp39-cp39-macosx_10_9_x86_64.whl 185 | #cp src2/tools/mac/aubio-0.5.0a0-cp39-cp39-macosx_10_9_x86_64.whl src/aubio-0.5.0a0-cp39-cp39-macosx_10_9_x86_64.whl 186 | cd src 187 | curl -sSL https://install.python-poetry.org | python - -y 188 | export PATH="/Users/runner/.local/bin:$PATH" 189 | poetry install 190 | poetry run pip install pyinstaller 191 | poetry run pip install mido 192 | CMD_BUILD: > 193 | export PATH="/Users/runner/.local/bin:$PATH" && 194 | cd src && poetry run pyinstaller mac.spec && 195 | cd dist/ && mkdir LedFx && chmod +x ./LedFx_v2/Contents/MacOS/LedFx_v2 && mv ./LedFx_v2 ./LedFx/LedFx.app && cd .. && 196 | mkdir ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate && 197 | mkdir ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data && 198 | cp -rf ../src2/tools/mac/libsamplerate-x86-x64.dylib ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data/ && 199 | mv ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data/libsamplerate-x86-x64.dylib ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data/libsamplerate.dylib 200 | CMD_PACK: | 201 | rm -rf ./LedFx.app 202 | mv ./src/dist/LedFx/LedFx.app ./LedFx.app 203 | tar -czf my_files.tar ./LedFx.app 204 | ASSET_NAME: LedFx_core-v2.0.${{ github.event.inputs.fversion }}--osx-x64.zip 205 | ASSET_PATH: my_files.tar 206 | ASSET_MIME: application/zip 207 | # ASSET_NAME2: LedFx-notray--osx-x64.app.zip 208 | # ASSET_PATH2: my_files2.tar 209 | # ASSET_MIME2: application/zip 210 | # ASSET_NAME3: LedFx-notray--osx-x64.app.zip 211 | # ASSET_PATH3: my_files2.tar 212 | # ASSET_MIME3: application/zip 213 | 214 | arch: x64 215 | 216 | - os: osx-arm64 217 | continue-on-error: true 218 | # if: ${{ github.event.inputs.macarm == 'true' }} 219 | runtime: osx-arm64 220 | TARGET: macos 221 | CMD_DEP: | 222 | # brew install portaudio pulseaudio 223 | arch -arm64 brew install mbedtls@2 224 | echo 'export PATH="/opt/homebrew/opt/mbedtls@2/bin:$PATH"' >> ~/.zshrc 225 | export LDFLAGS="-L/opt/homebrew/opt/mbedtls@2/lib" 226 | export CPPFLAGS="-I/opt/homebrew/opt/mbedtls@2/include" 227 | source ~/projects/tsworkspace/led311/bin/activate 228 | cp src2/tools/mac/mac-arm64.spec src/mac.spec 229 | cp src2/tools/mac/selfhosted.py src/selfhosted.py 230 | cd src 231 | arch -arm64 python selfhosted.py 232 | arch -arm64 python --version 233 | curl -sSL https://install.python-poetry.org | arch -arm64 python - --uninstall 234 | # curl -sSL https://install.python-poetry.org | arch -arm64 python - -y 235 | arch -arm64 pip --version 236 | arch -arm64 pip install pipx 237 | arch -arm64 pipx install poetry 238 | export PATH="$HOME/.local/bin:$PATH" 239 | arch -arm64 poetry install 240 | arch -arm64 poetry run pip install pyinstaller 241 | arch -arm64 poetry run pip install mido 242 | arch -arm64 poetry run pip install python-osc 243 | arch -arm64 poetry run pip install python-mbedtls 244 | CMD_BUILD: > 245 | export PATH="$HOME/.local/bin:$PATH" && 246 | cd src && arch -arm64 poetry run pyinstaller mac.spec && 247 | cd dist/ && mkdir LedFx && chmod +x ./LedFx_v2/Contents/MacOS/LedFx_v2 && mv ./LedFx_v2 ./LedFx/LedFx.app && cd .. && 248 | mkdir ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate && 249 | mkdir ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data && 250 | cp -rf ../src2/tools/mac/libsamplerate-arm64.dylib ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data/ && 251 | mv ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data/libsamplerate-arm64.dylib ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data/libsamplerate.dylib && 252 | cp ./dist/LedFx/LedFx.app/Contents/MacOS/samplerate/_samplerate_data/libsamplerate.dylib ./dist/LedFx/LedFx.app/Contents/MacOS/libsamplerate.0.dylib 253 | CMD_PACK: | 254 | rm -rf ./LedFx.app 255 | mv ./src/dist/LedFx/LedFx.app ./LedFx.app 256 | tar -czf my_files.tar ./LedFx.app 257 | OUT_FILE_NAME: LedFx_core-v2.0.${{ github.event.inputs.fversion }}--osx-arm64.zip 258 | ASSET_NAME: LedFx_core-v2.0.${{ github.event.inputs.fversion }}--osx-arm64.zip 259 | ASSET_PATH: my_files.tar 260 | ASSET_MIME: application/zip 261 | # ASSET_NAME2: LedFx-notray--osx-x64.app.zip 262 | # ASSET_PATH2: my_files2.tar 263 | # ASSET_MIME2: application/zip 264 | # ASSET_NAME3: LedFx-notray--osx-arm64.app.zip 265 | # ASSET_PATH3: my_files2.tar 266 | # ASSET_MIME3: application/zip 267 | arch: arm64 268 | 269 | - os: windows-latest 270 | continue-on-error: true 271 | runtime: win-x64 272 | TARGET: windows 273 | CMD_DEP: | 274 | del src/win.spec 275 | cp src2/tools/win/win.spec src/win.spec 276 | cp src2/tools/win/yzwin.spec src/yzwin.spec 277 | cd src 278 | # curl -sSL https://install.python-poetry.org | python - -y 279 | # setx /M path "%path%;C:\Users\runneradmin\AppData\Roaming\Python\Scripts" 280 | pip install pipx 281 | pipx install poetry 282 | poetry install 283 | poetry run ledfx-loopback-install 284 | poetry run pip install pyinstaller 285 | poetry run pip install mido 286 | # dir c:\hostedtoolcache\windows\python\3.9.13\x64\lib\site-packages\ 287 | # cp ../src2/tools/win/hook-samplerate.py c:\hostedtoolcache\windows\python\3.9.13\x64\lib\site-packages\_pyinstaller_hooks_contrib\hooks\stdhooks\hook-samplerate.py 288 | # python3 -m pip install -e . 289 | # dir c:\hostedtoolcache\windows\python\3.9.13\x64\lib\site-packages\samplerate\_samplerate_data\ 290 | # cp ../src2/tools/win/libportaudio64bit.dll c:\hostedtoolcache\windows\python\3.9.13\x64\lib\site-packages\_sounddevice_data\portaudio-binaries\libportaudio-64bit.dll 291 | # cp ../src2/tools/win/libportaudio64bit.dll c:\hostedtoolcache\windows\python\3.9.13\x64\lib\site-packages\_sounddevice_data\portaudio-binaries\ 292 | # cd .. 293 | CMD_BUILD: cd src && poetry run pyinstaller win.spec && poetry run pyinstaller yzwin.spec && mv ./dist/LedFx.exe ../LedFx_core-v2.0.${{ github.event.inputs.fversion }}--win-portable.exe 294 | CMD_PACK: 7z.exe a -tzip LedFx_core-v2.0.${{ github.event.inputs.fversion }}--win.zip ./src/dist/LedFx "-mx5" "-xr!.git" "-xr!.github" 295 | ASSET_NAME: LedFx_core-v2.0.${{ github.event.inputs.fversion }}--win.zip 296 | ASSET_PATH: ./LedFx_core-v2.0.${{ github.event.inputs.fversion }}--win.zip 297 | ASSET_MIME: application/zip 298 | ASSET_NAME2: LedFx_core-v2.0.${{ github.event.inputs.fversion }}--win-portable.exe 299 | ASSET_PATH2: ./LedFx_core-v2.0.${{ github.event.inputs.fversion }}--win-portable.exe 300 | ASSET_MIME2: application/vnd.microsoft.portable-executable 301 | # ASSET_NAME3: LedFx-notray--win.exe 302 | # ASSET_PATH3: ./LedFx-notray--win.exe 303 | # ASSET_MIME3: application/vnd.microsoft.portable-executable 304 | 305 | arch: x64 306 | 307 | steps: 308 | - uses: actions/checkout@v3 309 | with: 310 | repository: LedFx/LedFx 311 | ref: main 312 | path: src 313 | - uses: actions/checkout@v3 314 | with: 315 | repository: YeonV/LedFx-Builds 316 | token: ${{ secrets.GITHUB_TOKEN }} 317 | ref: main 318 | path: src2 319 | - name: Delete old frontend 320 | uses: JesseTG/rm@2fb8f3b8a0e41fc222e7943b63306c602feb187e 321 | with: 322 | path: ./src/ledfx_frontend 323 | - name: get git version 324 | run: | 325 | cd src 326 | git rev-parse HEAD >> ledfx/git_version 327 | - name: Load Frontend from release job 328 | uses: actions/download-artifact@v1 329 | with: 330 | name: ledfx_frontend_v2 331 | - name: Include new frontend 332 | if: "!startsWith(matrix.OS, 'win')" 333 | run: | 334 | cd ./ledfx_frontend_v2 335 | ls 336 | unzip -o -u ledfx_frontend_v2.zip 337 | cd .. 338 | cp -rf ./ledfx_frontend_v2/ledfx_frontend_v2 ./src/ledfx_frontend 339 | ls ./src/ledfx_frontend 340 | - name: Include new frontend win 341 | if: "startsWith(matrix.OS, 'win')" 342 | run: | 343 | cd ./ledfx_frontend_v2 344 | ls 345 | tar -xf ledfx_frontend_v2.zip 346 | cd .. 347 | cp -r ./ledfx_frontend_v2/ledfx_frontend_v2 ./src/ledfx_frontend 348 | ls ./src/ledfx_frontend 349 | - name: Bump version 350 | if: "startsWith(matrix.OS, 'win')" 351 | run: | 352 | cp ./src2/tools/win/version-bump.ps1 ./ 353 | ./version-bump.ps1 ${{ github.event.inputs.fversion }} 354 | - name: Bump version unix 355 | if: "startsWith(matrix.OS, 'ubu')" 356 | run: | 357 | sed -i 's/\bMICRO_VERSION = .*\b/MICRO_VERSION = ${{ github.event.inputs.fversion }}/' ./src/ledfx/consts.py 358 | 359 | - name: Bump version osx 360 | if: "!startsWith(matrix.OS, 'win') && !startsWith(matrix.OS, 'ubu')" 361 | run: | 362 | brew install gnu-sed 363 | gsed -i 's/\bMICRO_VERSION = .*\b/MICRO_VERSION = ${{ github.event.inputs.fversion }}/' ./src/ledfx/consts.py 364 | 365 | - uses: stefanzweifel/git-auto-commit-action@v4 366 | continue-on-error: true 367 | with: 368 | commit_message: '[new-frontend] v2.0.${{ github.event.inputs.fversion }}' 369 | push_options: --force 370 | repository: ./src 371 | token: ${{ secrets.LEDFX_TOKEN }} 372 | tagging_message: 'v2.0.${{ github.event.inputs.fversion }}' 373 | 374 | - name: Create Pull Request 375 | continue-on-error: true 376 | if: "startsWith(matrix.OS, 'win')" 377 | uses: peter-evans/create-pull-request@v4 378 | with: 379 | path: ./src 380 | token: ${{ secrets.LEDFX_TOKEN }} 381 | delete-branch: true 382 | branch: new-frontend 383 | commit-message: '[new-frontend] v2.0.${{ github.event.inputs.fversion }}' 384 | title: Release v2.0.${{ github.event.inputs.fversion }} 385 | body: New version incoming! 386 | 387 | - name: Set up Python 3.10 388 | if: "!startsWith(matrix.OS, 'win') && !startsWith(matrix.OS, 'osx')" 389 | uses: actions/setup-python@v4 390 | with: 391 | python-version: '3.10' 392 | cache: 'pip' 393 | - name: Set up Python 3.9 394 | if: "startsWith(matrix.OS, 'win')" 395 | uses: actions/setup-python@v4 396 | with: 397 | python-version: '3.9.13' 398 | cache: 'pip' 399 | - name: Set up Python 3.11 400 | if: "startsWith(matrix.OS, 'osx')" 401 | uses: actions/setup-python@v4 402 | with: 403 | python-version: '3.11' 404 | - name: Set up Node.js 405 | # if: "!startsWith(matrix.OS, 'osx-arm64')" 406 | uses: actions/setup-node@v4 407 | with: 408 | node-version: 20 409 | architecture: ${{ matrix.arch }} 410 | # cache: 'yarn' 411 | # cache-dependency-path: '**/yarn.lock' 412 | - name: Update 413 | if: "startsWith(matrix.OS, 'ubuntu')" 414 | run: | 415 | sudo apt update 416 | - name: Install dependencies 417 | # if: "!startsWith(runner.name, 'BLADE')" 418 | run: ${{matrix.CMD_DEP}} 419 | - name: Build with pyinstaller for ${{matrix.TARGET}} 420 | run: ${{matrix.CMD_BUILD}} 421 | #- name: Delete .lib from numpy 422 | # run: | 423 | # Remove-Item -path ./src/dist/LedFx/numpy/.libs -recurse -force -ErrorAction Ignore 424 | - name: Load Release URL File from release job 425 | uses: actions/download-artifact@v1 426 | with: 427 | name: release_url 428 | - name: Get Release File Name & Upload URL 429 | id: get_release_info 430 | shell: bash 431 | run: | 432 | value=`cat release_url/release_url.txt` 433 | echo "upload_url=$value" >> $GITHUB_OUTPUT 434 | - name: Pack app 435 | run: ${{matrix.CMD_PACK}} 436 | 437 | - name: Upload Frontend Build as Asset 438 | if: "startsWith(matrix.OS, 'win')" 439 | continue-on-error: true 440 | id: upload-release-asset-2 441 | uses: actions/upload-release-asset@v1 442 | env: 443 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 444 | with: 445 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 446 | asset_path: ./ledfx_frontend_v2/ledfx_frontend_v2.zip 447 | asset_name: ledfx_frontend-v2.0.${{ github.event.inputs.fversion }}.zip 448 | asset_content_type: ${{ matrix.ASSET_MIME}} 449 | 450 | - name: Upload Asset 1 451 | id: upload-release-asset1 452 | uses: YeonV/upload-release-asset@v1 453 | env: 454 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 455 | with: 456 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 457 | asset_path: ${{ matrix.ASSET_PATH}} 458 | asset_name: ${{ matrix.ASSET_NAME}} 459 | asset_content_type: ${{ matrix.ASSET_MIME}} 460 | 461 | - name: Upload Asset 2 462 | if: "startsWith(matrix.OS, 'win')" 463 | id: upload-release-asset2 464 | uses: YeonV/upload-release-asset@v1 465 | env: 466 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 467 | with: 468 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 469 | asset_path: ${{ matrix.ASSET_PATH2}} 470 | asset_name: ${{ matrix.ASSET_NAME2}} 471 | asset_content_type: ${{ matrix.ASSET_MIME2}} 472 | 473 | # - name: Upload Asset 3 474 | # if: "!startsWith(matrix.OS, 'win')" 475 | # id: upload-release-asset3 476 | # uses: YeonV/upload-release-asset@v1 477 | # env: 478 | # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 479 | # with: 480 | # upload_url: ${{ steps.get_release_info.outputs.upload_url }} 481 | # asset_path: ${{ matrix.ASSET_PATH3}} 482 | # asset_name: ${{ matrix.ASSET_NAME3}} 483 | # asset_content_type: ${{ matrix.ASSET_MIME3}} 484 | 485 | # - name: Save Core for CC 486 | # if: "!startsWith(matrix.OS, 'osx-arm64')" 487 | # uses: actions/upload-artifact@v1 488 | # with: 489 | # name: ${{ matrix.ASSET_NAME}} 490 | # path: ${{ matrix.ASSET_PATH}} 491 | 492 | # Client 493 | 494 | - uses: actions/checkout@v3 495 | with: 496 | repository: YeonV/LedFx-Frontend-v2 497 | ref: main 498 | path: frontend 499 | # - name: Load Core from previous job win 500 | # if: "!startsWith(matrix.OS, 'ubu') && !startsWith(matrix.OS, 'win') && !startsWith(matrix.OS, 'osx-arm64')" 501 | # uses: actions/download-artifact@v1 502 | # with: 503 | # name: ${{matrix.ASSET_NAME}} 504 | 505 | - name: cd 506 | run: | 507 | cd frontend 508 | 509 | - name: Move Core-win 510 | if: "startsWith(matrix.OS, 'win')" 511 | run: | 512 | cp ./src/dist/LedFx/ ./frontend/extraResources/ -Recurse && 513 | dir ./frontend/extraResources/LedFx 514 | 515 | - name: Move Core-mac 516 | if: "startsWith(matrix.TARGET, 'mac')" 517 | run: | 518 | cp -r ./LedFx.app ./frontend/extraResources/LedFx_core.app 519 | # cd ${{matrix.ASSET_NAME}} 520 | # tar -xf my_files2.tar 521 | # cd .. 522 | # cp -r ${{matrix.ASSET_NAME}}/${{matrix.ASSET_NAME}} ./frontend/extraResources/LedFx_core.app 523 | 524 | - name: Move Core-linux 525 | if: "startsWith(matrix.OS, 'ubu')" 526 | run: | 527 | ls ${{matrix.ASSET_NAME}} 528 | # cp {{matrix.ASSET_NAME}}/{{matrix.ASSET_NAME}}.zip ./frontend/extraResources/LedFx_core.app 529 | 530 | - name: Building Clients 531 | run: | 532 | cd frontend && npm config set legacy-peer-deps true && npm install --force && npm install postcss && npm run distall 533 | env: 534 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 535 | 536 | - name: Load Release URL File from release job 537 | uses: actions/download-artifact@v1 538 | with: 539 | name: release_url 540 | 541 | - name: Move Client Linux 542 | if: "startsWith(matrix.OS, 'ubu')" 543 | run: | 544 | ls ./frontend/dist/ 545 | mv ./frontend/dist/ledfx-2.0.${{ github.event.inputs.fversion }}.AppImage ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--linux-${{matrix.arch}}.AppImage 546 | mv ./frontend/dist/ledfx_2.0.${{ github.event.inputs.fversion }}_amd64.snap ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--linux-${{matrix.arch}}.snap 547 | 548 | - name: Upload Win-Portable as Asset 549 | if: "startsWith(matrix.OS, 'win')" 550 | id: upload-release-asset-portable 551 | uses: YeonV/upload-release-asset@v1 552 | env: 553 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 554 | with: 555 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 556 | asset_path: ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--win-portable.exe 557 | asset_name: LedFx_client-v2.0.${{ github.event.inputs.fversion }}--win-portable.exe 558 | asset_content_type: application/vnd.microsoft.portable-executable 559 | 560 | - name: Upload Win-Setup as Asset 561 | if: "startsWith(matrix.OS, 'win')" 562 | id: upload-release-asset-setup 563 | uses: YeonV/upload-release-asset@v1 564 | env: 565 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 566 | with: 567 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 568 | asset_path: ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--win-setup.exe 569 | asset_name: LedFx_client-v2.0.${{ github.event.inputs.fversion }}--win-setup.exe 570 | asset_content_type: application/vnd.microsoft.portable-executable 571 | 572 | - name: Upload Win-Zip as Asset 573 | if: "startsWith(matrix.OS, 'win')" 574 | id: upload-release-asset-zip 575 | uses: YeonV/upload-release-asset@v1 576 | env: 577 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 578 | with: 579 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 580 | asset_path: ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--win.zip 581 | asset_name: LedFx_client-v2.0.${{ github.event.inputs.fversion }}--win.zip 582 | asset_content_type: application/zip 583 | 584 | - name: Upload Win-CC as Asset 585 | if: "startsWith(matrix.OS, 'win')" 586 | id: upload-release-asset-cc 587 | uses: YeonV/upload-release-asset@v1 588 | env: 589 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 590 | with: 591 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 592 | asset_path: ./frontend/dist/LedFx_CC-v2.0.${{ github.event.inputs.fversion }}--win-setup.exe 593 | asset_name: LedFx_CC-v2.0.${{ github.event.inputs.fversion }}--win-setup.exe 594 | asset_content_type: application/vnd.microsoft.portable-executable 595 | 596 | - name: Upload Mac-Zip as Asset 597 | if: "startsWith(matrix.runtime, 'osx')" 598 | id: upload-release-asset-zip-mac 599 | uses: YeonV/upload-release-asset@v1 600 | env: 601 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 602 | with: 603 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 604 | asset_path: ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.zip 605 | asset_name: LedFx_client-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.zip 606 | asset_content_type: application/zip 607 | 608 | - name: Upload Mac-CC as Asset 609 | if: "startsWith(matrix.runtime, 'osx')" 610 | id: upload-release-asset-cc-mac 611 | uses: YeonV/upload-release-asset@v1 612 | env: 613 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 614 | with: 615 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 616 | asset_path: ./frontend/dist/LedFx_CC-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.zip 617 | asset_name: LedFx_CC-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.zip 618 | asset_content_type: application/zip 619 | 620 | - name: Upload Mac-Dmg as Asset 621 | if: "startsWith(matrix.runtime, 'osx')" 622 | id: upload-release-asset-dmg-mac 623 | uses: YeonV/upload-release-asset@v1 624 | env: 625 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 626 | with: 627 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 628 | asset_path: ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.dmg 629 | asset_name: LedFx_client-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.dmg 630 | asset_content_type: application/octet-stream 631 | 632 | - name: Upload Mac-CC-Dmg as Asset 633 | if: "startsWith(matrix.runtime, 'osx')" 634 | id: upload-release-asset-cc-mac-dmg 635 | uses: YeonV/upload-release-asset@v1 636 | env: 637 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 638 | with: 639 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 640 | asset_path: ./frontend/dist/LedFx_CC-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.dmg 641 | asset_name: LedFx_CC-v2.0.${{ github.event.inputs.fversion }}--mac-${{matrix.arch}}.dmg 642 | asset_content_type: application/octet-stream 643 | 644 | - name: Upload Linux as Asset 645 | if: "startsWith(matrix.OS, 'ubu')" 646 | id: upload-release-asset-linux 647 | uses: YeonV/upload-release-asset@v1 648 | env: 649 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 650 | with: 651 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 652 | asset_path: ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--linux-${{matrix.arch}}.AppImage 653 | asset_name: LedFx_client-v2.0.${{ github.event.inputs.fversion }}--linux-${{matrix.arch}}.AppImage 654 | asset_content_type: application/octet-stream 655 | 656 | - name: Upload Linux as Asset 657 | if: "startsWith(matrix.OS, 'ubu')" 658 | id: upload-release-asset-linux2 659 | uses: YeonV/upload-release-asset@v1 660 | env: 661 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 662 | with: 663 | upload_url: ${{ steps.get_release_info.outputs.upload_url }} 664 | asset_path: ./frontend/dist/LedFx_client-v2.0.${{ github.event.inputs.fversion }}--linux-${{matrix.arch}}.snap 665 | asset_name: LedFx_client-v2.0.${{ github.event.inputs.fversion }}--linux-${{matrix.arch}}.snap 666 | asset_content_type: application/octet-stream 667 | 668 | - name: Send Discord Post 669 | if: "startsWith(matrix.OS, 'ubu')" 670 | run: | 671 | curl -H "Content-Type: application/json" -d '{"content": "**[DOWNLOAD]** https://github.com/YeonV/LedFx-Builds/releases/tag/v2.0.${{ github.event.inputs.fversion }}\n**[PREVIEW]** \n\n**Please** do not send messages here. Use the [testing]-Post instead!", "thread_name": "[beta] Release 2.0.${{ github.event.inputs.fversion }}"}' ${{ secrets.DISCORD_RELEASE_WEBHOOK }} 672 | curl -H "Content-Type: application/json" -d '{"content": "https://github.com/YeonV/LedFx-Builds/releases/tag/v2.0.${{ github.event.inputs.fversion }}", "thread_name": "[testing] Release 2.0.${{ github.event.inputs.fversion }}"}' ${{ secrets.DISCORD_RELEASE_WEBHOOK }} 673 | -------------------------------------------------------------------------------- /.github/workflows/__aubio.yml_OFF: -------------------------------------------------------------------------------- 1 | name: Build Aubio Wheel 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build: 8 | runs-on: windows-latest 9 | 10 | steps: 11 | - name: Checkout code 12 | uses: actions/checkout@v2 13 | 14 | - name: Set up Python 15 | uses: actions/setup-python@v2 16 | with: 17 | python-version: '3.12' 18 | 19 | - name: Get full Python version 20 | id: full-python-version 21 | run: echo version=$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") >> $GITHUB_OUTPUT 22 | 23 | - name: Install poetry 24 | run: | 25 | curl -sSL https://install.python-poetry.org | python - -y 26 | 27 | - name: Update Path for Windows 28 | run: echo "$APPDATA\Roaming\Python\Scripts" >> $GITHUB_PATH 29 | 30 | - name: Enable long paths for git on Windows 31 | 32 | # Enable handling long path names (+260 char) on the Windows platform 33 | # https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation 34 | run: git config --system core.longpaths true 35 | 36 | - name: Configure poetry 37 | run: poetry config virtualenvs.in-project true 38 | 39 | - name: Clone Aubio Repo 40 | run: | 41 | git clone https://git.aubio.org/aubio/aubio.git 42 | cd aubio 43 | poetry install 44 | 45 | - name: Build Aubio Wheel 46 | run: | 47 | cd aubio 48 | poetry build 49 | 50 | - name: Upload Wheel as Artifact 51 | uses: actions/upload-artifact@v4 52 | with: 53 | name: aubio_wheel 54 | path: aubio/dist/*.whl 55 | retention-days: 1 56 | -------------------------------------------------------------------------------- /.github/workflows/__tool.yml_OFF: -------------------------------------------------------------------------------- 1 | name: Build Tool 2 | 3 | on: 4 | workflow_dispatch: 5 | # Inputs the workflow accepts. 6 | inputs: 7 | fversion: 8 | description: 'Frontend Version' 9 | default: '50' 10 | required: false 11 | 12 | jobs: 13 | tool: 14 | name: ToolCache ${{ matrix.runtime }} 15 | runs-on: ${{ matrix.os }} 16 | strategy: 17 | fail-fast: false 18 | matrix: 19 | include: 20 | - os: ubuntu-latest 21 | continue-on-error: true 22 | TARGET: ubuntu 23 | runtime: linux-x64 24 | 25 | - os: macos-latest 26 | continue-on-error: true 27 | runtime: osx-x64 28 | TARGET: macos 29 | 30 | - os: osx-arm64 31 | continue-on-error: true 32 | runtime: osx-arm64 33 | TARGET: macos 34 | 35 | - os: windows-latest 36 | continue-on-error: true 37 | runtime: win-x64 38 | TARGET: windows 39 | 40 | steps: 41 | - name: Clear any existing tool cache 42 | run: | 43 | mv "${{ runner.tool_cache }}" "${{ runner.tool_cache }}.old" 44 | mkdir -p "${{ runner.tool_cache }}" 45 | - name: Set up Python 3.10 46 | if: "!startsWith(matrix.OS, 'win') && !startsWith(matrix.OS, 'osx')" 47 | uses: actions/setup-python@v4 48 | with: 49 | python-version: '3.10' 50 | - name: Set up Python 3.9 51 | if: "startsWith(matrix.OS, 'win')" 52 | uses: actions/setup-python@v4 53 | with: 54 | python-version: '3.9.13' 55 | - name: Set up Python 3.11 56 | if: "startsWith(matrix.OS, 'osx')" 57 | uses: actions/setup-python@v4 58 | with: 59 | python-version: '3.11' 60 | 61 | - name: Setup Node 20 62 | uses: actions/setup-node@v4 63 | with: 64 | node-version: 20 65 | 66 | - name: Archive tool cache 67 | run: | 68 | cd "${{ runner.tool_cache }}" 69 | tar -czf tool_cache-${{ matrix.OS }}.tar.gz * 70 | - name: Upload tool cache artifact 71 | uses: actions/upload-artifact@v2 72 | with: 73 | path: ${{runner.tool_cache}}/tool_cache-${{ matrix.OS }}.tar.gz 74 | -------------------------------------------------------------------------------- /.github/workflows/test_android.yml: -------------------------------------------------------------------------------- 1 | name: Debug Android Build 2 | on: 3 | workflow_dispatch: 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-22.04 8 | steps: 9 | - name: Checkout 10 | uses: actions/checkout@v4 11 | with: 12 | repository: broccoliboy/ledfx-android 13 | submodules: recursive 14 | - name: Setup python 15 | uses: actions/setup-python@v5 16 | with: 17 | architecture: x64 18 | python-version: 3.12 19 | - name: Setup Java 17 required by Gradle 20 | uses: actions/setup-java@v4 21 | with: 22 | distribution: 'temurin' # or 'zulu','liberica', etc. 23 | java-version: '17' 24 | - name: Set JAVA_HOME 25 | run: | 26 | echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV 27 | - name: Prepare virtual environment 28 | run: | 29 | python3 -m venv venv 30 | source venv/bin/activate 31 | echo "Using Python==$(python --version)" 32 | - name: Install and upgrade dependencies 33 | run: | 34 | sudo apt update 35 | sudo apt install -y \ 36 | git \ 37 | zip \ 38 | unzip \ 39 | openjdk-17-jdk \ 40 | python3-pip \ 41 | autoconf \ 42 | automake \ 43 | libtool \ 44 | pkg-config \ 45 | zlib1g-dev \ 46 | libncurses5-dev \ 47 | libncursesw5-dev \ 48 | libtinfo5 \ 49 | cmake \ 50 | libffi-dev \ 51 | libssl-dev 52 | export PATH=$PATH:~/.local/bin/ 53 | python3 -m pip install --upgrade pip 54 | python3 -m pip install --upgrade git+https://github.com/kivy/buildozer 55 | - name: Build with Buildozer 56 | run: buildozer android debug 57 | - name: Upload artifacts 58 | uses: actions/upload-artifact@v4 59 | with: 60 | name: package 61 | path: ./bin/*.apk 62 | # release: 63 | # if: startsWith(github.ref, 'refs/tags/v') 64 | # runs-on: ubuntu-22.04 65 | # needs: build 66 | # permissions: 67 | # contents: write 68 | # steps: 69 | # - name: Checkout 70 | # uses: actions/checkout@v4 71 | # - name: Download artifacts 72 | # uses: actions/download-artifact@v4 73 | # with: 74 | # name: package 75 | # path: ./bin 76 | # - name: GitHub release 77 | # env: 78 | # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 79 | # run: | 80 | # gh release create "${{ github.ref_name }}" ./bin/*.apk --title "${{ github.ref_name }}" --notes "Release ${GITHUB_REF_NAME}" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv/ 2 | frontend/ 3 | backend/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Yeon Vinzenz Varapragasam 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LedFx Build Pipelines 2 | 3 | ## ![state](https://img.shields.io/badge/STATE-beta-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAACAdJREFUeF7tnTvIHVUQx///+EYTRWIMooKiKAHfgo2ClqJdJIXa+EAkhRYiapMmTQSxUEQUjYVaqOmEtCKKCBJQUSIRQVCRGIMajW8zsmG/j+9xd3f27szZPd+Z297ZOfP43ZnZc8/eS8Sr6AiwaO/DeQQAhUMQAAQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAhUegcPejAgQAyyMgIg8UHpMm9z8g+dlYsfHIC8kXV1UAEbkVwN6xHJ34uutISmobRWQPgK3G675C8t6ZLUBE3gNwo/GCa0HdvyRPSumIiFwP4CPjNY+SPKPS2TgDiMh/ANYZL7wW1O0leVsqR0TEvOKQXMx7GwAnAvgnlaOZrXMTyfe9bRaRPwGcYrzOFpL7F3S23gXEPNAaetd5wLPvL/Wq8zYw5oFGCNzmAe++3wuASjjmgUYIXOYB774/DwAxDzR3A9N5IEXf7w1AXQVif6AZApN5IFXfnwuAGoLYH5gNweB5IGXfnxuAmAda7woGzQMp+/5QAGIeMJ4HUvf9QQDEPNC5LdNrHhij7w8GoIbgTQAXd4Zj+gLXGZuongfG6vsmABgHbTR1IvIcgO3GBqjmgbH6fgCwItsi8jOAM40haN0fGLPvBwAzMu3xaay+TZ11fmDsvh8AzAbgEgBfGleBVfPAFPp+ANCQ5RTzgEelWfr9fl+AO78N7Kswd3nPeWAqfd+1AojIqT0hOK2nfJd40/pHSB7turi+xTU/hQPgHQC3aNbvIbOb5H095FeJmlcAEakcvXmIUV7XakuliHjMA9ZuLZ7rG6LYHID6EzTV84R/k1QdsXKaB4bkatm1Wpi7FvQCYMrfF7xLUlWhnOaBrpxo3l92rk9zQZOMCwB1FbgdwNtDjHO8dhvJtzT6PaZ2zbotMsfP8w/UsXi5GwA1BB8CuMHKWGM9G0j+2qVzYvOASd9f6rMrADUEx9qeP+hKgOf72j46lXlAa2+fmKUA4GQAf/UxKqHsQZKbNetNYB4w6/tJK0BdBe4AoOq5mmQYyzxL8iGNzhHnAdO+nxyAGoJ9AK7VBHoEmWtIfty17kjzgHnfHwWAGgKPHbauvGnfV53kST0PePT9MQGotn1/12Yksdwxkido1kw4D7j0/dEAqKvALgCPaQI9gsw+ktXj2J2vBPPA4H3+TidS356JSLUNWz3xOuXX/SRf7jLQeR5w7fujVYAEn5quvGnfP4fkj13CIvIagLu65Pq+7933RwFARDzuAp4i+WjfAFvJO32/X5ln+rxhm7/uG0F1398G4A2rwNd6DpPcaKxTrc7pXN/S9VV3JWqDGwTdAagPiPwx1NCV16cskyvXdjrXt3IZ9fMFQ2KbAgCPe/8LSH47xPEh1yacZVTPFwzxxRUAEal2164aYuCMa3eRfMJYp1qdY99vssF1HnADQETuBPC6OrI6wUMkN+lE7aUS9P0mo93mARcARMRlx6+Avt8EgNs84AWAR98/j+T39p9rncaEfb/JIJd5wBwAEfkEwJW6sKqldpLcoZY2Fhyh7yebB0wBEJFqV6zaHbN8/UDyXEuFfXSN2PeTzANmAETf74PVIFnTecASAI++v5nkwUHhGnDxBPq++zxgAoCIfArgigGxnnXpDpI7jXWq1U2o77vOA4MBEJG7AbyqjqxO8DuS5+tE7aUm2Pfd5oFBAIjI6QB+s07BGrzfrx5KvTrF7w/0zcVQADz6/iaSh/o6YiXv0fcXgHY6Tzhof2BuAETkcwBbrAJf63mc5JPGOtXqnPr+snN9TucJ5/6+YC4AROQeALvVkdUJfkPyQp2ovZRT3595nt+jyjT9HlFXpHoDEH2/K6SL7zee63M6TzjX/sA8AHj0/Y0kD6tDayzo8YnsGmSnMg/0AkBEqv+audw4/o+QfNpYp1pdir7fZMwU5gE1ACJS/RbNS+rI6gS/JnmRTtReyqnv9zrP71F9+swDKgCi76vh632ef+x5QAuAR98/m+RP6tAaC3p88rr6fksrGO33ijsBEJEvAFxmHP+HST5jrFOtbsy+P7V5oBWA+g+LX1BHVif4FcnqZ9hGeTn1fZPn9z2qUtc80AiAiKwHcMQ6S/OWSQs7nM7z9+77LVXA4/cJW/cH2gDw6PtnkfzFIpnz6PD4hFkDnXp/YCYAInIAwKXzBLnlmu0knzfWqVY3xb4/hXlgFQAi8iAA60QdIGk9SPZJ/h4AW9UX6ARN+n4LBB4VeNXzBcsAiL6vyzwAs74/9jywEgAP6taTND80ok1VDn1/zP2BRQBEpPq3DOvbM9WvbWiT2Vcup74/1jxwHAARqf41q9qNsnztJ2l9YERt35Tv99VO1IIeVWxhf4AisgGA+a2Z9e1Rn6BN/X6/jy/1B9Rtf6BzK7ivsSGfVwQCgLzyZW5tAGAe0rwUBgB55cvc2gDAPKR5KQwA8sqXubUBgHlI81IYAOSVL3NrAwDzkOalMADIK1/m1gYA5iHNS2EAkFe+zK0NAMxDmpfCACCvfJlbGwCYhzQvhQFAXvkytzYAMA9pXgoDgLzyZW5tAGAe0rwUBgB55cvc2gDAPKR5KQwA8sqXubUBgHlI81IYAOSVL3NrAwDzkOalMADIK1/m1gYA5iHNS2EAkFe+zK0NAMxDmpfC/wGlVxOu/6/T0QAAAABJRU5ErkJggg==&logoColor=white) ![version](https://img.shields.io/github/v/release/YeonV/LedFx-Frontend-v2?label=VERSION&logo=git&logoColor=white) [![creator](https://img.shields.io/badge/CREATOR-Yeon-blue.svg?logo=github&logoColor=white)](https://github.com/YeonV) [![creator](https://img.shields.io/badge/A.K.A-Blade-darkred.svg?logo=github&logoColor=white)](https://github.com/YeonV) 4 | 5 | ![logo192](https://user-images.githubusercontent.com/28861537/119760144-c5126680-bea9-11eb-991a-c08eedbc5929.png) 6 | 7 | 8 | --- 9 | 10 | I just realized this repo got some stars even though its so undercover. 11 | 12 | ♥ Thank you soo much ♥ 13 | -------------------------------------------------------------------------------- /dev.bat: -------------------------------------------------------------------------------- 1 | cd frontend 2 | if "%~1"=="" goto both 3 | if "%~1"=="frontend" (goto frontend) else goto backend 4 | 5 | :frontend 6 | yarn start 7 | goto done 8 | 9 | :backend 10 | cd.. 11 | venv\Scripts\activate.bat & ledfx -vv --offline 12 | goto done 13 | 14 | :both 15 | cd .. 16 | call wt -d "./backend" cmd /k "title LedFx-Backend & code . & cd .. && venv\Scripts\activate.bat & ledfx -vv --offline"; ^ 17 | split-pane -H -d "./frontend" cmd /k "title LedFx-Frontend & code . & yarn start"; ^ 18 | split-pane -V -d "./" cmd /k "title LedFx & echo =============================== & echo LedFx Dev Environment & echo ------------------------------- & echo Commands to start: & echo dev & echo dev frontend & echo dev backend & echo =============================== & echo Backend: http://localhost:8888 & echo Frontend: http://localhost:3000 & echo =============================== 19 | 20 | :done 21 | cls 22 | 23 | -------------------------------------------------------------------------------- /init.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cls 3 | if "%~1"=="" ( 4 | SET project=ledfx_v2 5 | ) else ( 6 | SET project=%1 7 | ) 8 | 9 | if exist .\%project%\ ( 10 | echo A folder named '%project%' is already existing! 11 | pause 12 | goto end 13 | ) 14 | FOR /F "tokens=2" %%F IN ('"python --version"') DO SET v=%%F 15 | SET pyversion=%v:~0,4% 16 | if %pyversion%==3.10 ( 17 | echo Initializing LedFx-Dev for Python %pyversion% into '%project%': 18 | ) else if %pyversion%==3.9. ( 19 | echo Initializing LedFx-Dev for Python %pyversion% into '%project%': 20 | ) else ( 21 | echo Unsupport python version %pyversion% 22 | pause 23 | goto end 24 | ) 25 | git clone --quiet https://github.com/YeonV/LedFx-Builds %project% && cd %project% 26 | echo Getting Backend... 27 | git clone --quiet https://github.com/LedFx/LedFx backend 28 | echo Getting Frontend... 29 | git clone --quiet https://github.com/YeonV/LedFx-Frontend-v2 frontend 30 | echo Creating Python Venv... 31 | python -m venv venv 32 | cd venv 33 | 34 | call .\Scripts\activate.bat 35 | echo Installing dependencies ... 36 | pip install pipwin 37 | pipwin refresh 38 | pipwin install pywin32 39 | python .\Scripts\pywin32_postinstall.py -install 40 | pip install numpy 41 | pip install pillow 42 | pip install "chardet<4.0" 43 | pip install --upgrade git+https://github.com/Digital-Sapphire/PyUpdater.git@main 44 | pip install sounddevice==0.4.4 45 | if %pyversion%==3.10 ( 46 | copy ..\tools\win\aubio-0.5.0a0-cp310-cp310-win_amd64.whl . 47 | pip install -q aubio-0.5.0a0-cp310-cp310-win_amd64.whl 48 | ) else if %pyversion%==3.9. ( 49 | copy ..\tools\win\aubio-0.5.0a0-cp39-cp39-win_amd64.whl . 50 | pip install -q aubio-0.5.0a0-cp39-cp39-win_amd64.whl 51 | ) 52 | cd .. 53 | cd backend 54 | python setup.py develop 55 | 56 | if %pyversion%==3.10 ( 57 | copy ..\tools\win\libportaudio64bit.dll ..\venv\Lib\site-packages\sounddevice-0.4.4-py3.10-win-amd64.egg\_sounddevice_data\portaudio-binaries >nul 2>&1 58 | ) else if %pyversion%==3.9. ( 59 | copy ..\tools\win\libportaudio64bit.dll ..\venv\Lib\site-packages\sounddevice-0.4.4-py3.9-win-amd64.egg\_sounddevice_data\portaudio-binaries >nul 2>&1 60 | ) else ( 61 | echo Unsupport python version %pyversion% 62 | pause 63 | goto end 64 | ) 65 | cd .. 66 | cd frontend 67 | echo Installing Frontend... 68 | where yarn.exe >nul 2>&1 && echo yarn already installed || call ..\tools\win\install-yarn.bat 69 | echo Grab a coffee! 70 | call ..\install.bat 71 | cls 72 | cd %~dp0 73 | @REM del init.bat 74 | cd %project% 75 | echo DONE! 76 | echo ===== 77 | echo Commands to start: 78 | echo dev backend 79 | echo dev frontend 80 | echo dev 81 | echo ===== 82 | echo You want to start now? 83 | pause 84 | del init.bat 85 | del install.bat 86 | del .gitignore 87 | del LICENSE 88 | del README.md 89 | rmdir .github /s /q 90 | rmdir .git /s /q 91 | powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\Desktop\LedFx-Dev.lnk');$s.TargetPath='%~dp0%project%\dev.bat';$s.WorkingDirectory='%~dp0%project%\';$s.IconLocation='%~dp0%project%\backend\icons\discord.ico';$s.Save()" 92 | call dev.bat 93 | 94 | :end 95 | -------------------------------------------------------------------------------- /install.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | cd .. 3 | cd frontend 4 | yarn -s 5 | -------------------------------------------------------------------------------- /tools/Readme.md: -------------------------------------------------------------------------------- 1 | Some tools for ledfx development 2 | -------------------------------------------------------------------------------- /tools/cors.patch: -------------------------------------------------------------------------------- 1 | diff --git a/ledfx/api/__init__.py b/ledfx/api/__init__.py 2 | index 22d7dbd6..f035e456 100644 3 | --- a/ledfx/api/__init__.py 4 | +++ b/ledfx/api/__init__.py 5 | @@ -12,6 +12,11 @@ _LOGGER = logging.getLogger(__name__) 6 | 7 | SNACKBAR_OPTIONS = ["success", "info", "warning", "error"] 8 | 9 | +@web.middleware 10 | +async def cors_middleware(request, handler): 11 | + response = await handler(request) 12 | + response.headers['Access-Control-Allow-Private-Network'] = 'true' 13 | + return response 14 | 15 | @BaseRegistry.no_registration 16 | class RestEndpoint(BaseRegistry): 17 | @@ -192,6 +197,7 @@ class RestApi(RegistryLoader): 18 | self._ledfx = ledfx 19 | 20 | def register_routes(self, app): 21 | + app.middlewares.append(cors_middleware) 22 | methods = ["GET", "PUT", "POST", "DELETE"] 23 | cors = aiohttp_cors.setup( 24 | app, 25 | -------------------------------------------------------------------------------- /tools/linux/yzlinux.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | import os 3 | import importlib.util 4 | 5 | # specify the module that needs to be 6 | # imported relative to the path of the 7 | # module 8 | spec_imports = importlib.util.spec_from_file_location("hiddenimports","/home/runner/work/LedFx-Builds/LedFx-Builds/src/hiddenimports.py") 9 | 10 | # creates a new module based on spec 11 | imp = importlib.util.module_from_spec(spec_imports) 12 | 13 | # executes the module in its own namespace 14 | # when a module is imported or reloaded. 15 | spec_imports.loader.exec_module(imp) 16 | 17 | spec_root = os.path.abspath(SPECPATH) 18 | 19 | venv_root = os.path.abspath(os.path.join(SPECPATH, '..')) 20 | block_cipher = None 21 | print(venv_root) 22 | 23 | a = Analysis([f'{spec_root}/ledfx/__main__.py'], 24 | pathex=[f'{spec_root}', f'{spec_root}/ledfx'], 25 | binaries=[], 26 | datas=[(f'{spec_root}/ledfx_frontend', 'ledfx_frontend/'), (f'{spec_root}/ledfx/', 'ledfx/'), (f'{spec_root}/ledfx_assets', 'ledfx_assets/'),(f'{spec_root}/ledfx_assets/tray.png','.')], 27 | hiddenimports=imp.hiddenimports, 28 | hookspath=[f'{venv_root}/lib/site-packages/pyupdater/hooks'], 29 | runtime_hooks=[], 30 | excludes=[], 31 | win_no_prefer_redirects=False, 32 | win_private_assemblies=False, 33 | cipher=block_cipher, 34 | noarchive=False) 35 | pyz = PYZ(a.pure, a.zipped_data, 36 | cipher=block_cipher) 37 | exe = EXE(pyz, 38 | a.scripts, 39 | a.binaries, 40 | a.zipfiles, 41 | a.datas, 42 | name='LedFx', 43 | debug=False, 44 | bootloader_ignore_signals=False, 45 | strip=False, 46 | upx=True, 47 | console=False, 48 | icon=f'{spec_root}/ledfx_assets/discord.ico') 49 | -------------------------------------------------------------------------------- /tools/mac/aubio-0.4.9-cp39-cp39-macosx_10_9_x86_64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/mac/aubio-0.4.9-cp39-cp39-macosx_10_9_x86_64.whl -------------------------------------------------------------------------------- /tools/mac/aubio-0.5.0a0-cp39-cp39-macosx_10_9_x86_64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/mac/aubio-0.5.0a0-cp39-cp39-macosx_10_9_x86_64.whl -------------------------------------------------------------------------------- /tools/mac/libsamplerate-arm64.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/mac/libsamplerate-arm64.dylib -------------------------------------------------------------------------------- /tools/mac/libsamplerate-x86-x64.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/mac/libsamplerate-x86-x64.dylib -------------------------------------------------------------------------------- /tools/mac/mac-arm64.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | import os 3 | from hiddenimports import hiddenimports 4 | from ledfx.consts import PROJECT_VERSION 5 | # from PyInstaller.utils.hooks import copy_metadata 6 | # from PyInstaller.utils.hooks import collect_data_files 7 | 8 | spec_root = os.path.abspath(SPECPATH) 9 | venv_root = os.path.abspath(os.path.join(SPECPATH, '..')) 10 | block_cipher = None 11 | 12 | # Remove the ledfx.env file if it exists 13 | os.remove("ledfx.env") if os.path.exists("ledfx.env") else None 14 | 15 | # Get environment variables 16 | github_sha_value = os.getenv('GITHUB_SHA') 17 | 18 | # Initialize variables 19 | variables = [f"GITHUB_SHA = {github_sha_value}"] 20 | variables.append('IS_RELEASE = false') 21 | 22 | # Write to ledfx.env file 23 | with open('ledfx.env', 'a') as file: 24 | file.write('\n'.join(variables)) 25 | 26 | print(venv_root) 27 | print(f'{spec_root}') 28 | yzdata = [(f'{spec_root}/ledfx_frontend', 'ledfx_frontend/'), (f'{spec_root}/ledfx/', 'ledfx/'), (f'{spec_root}/ledfx_assets', 'ledfx_assets/'),(f'{spec_root}/ledfx_assets/tray.png','.'), (f'{spec_root}/ledfx.env','.')] 29 | # yzdata += collect_data_files('bokeh') 30 | # yzdata += collect_data_files('xyzservices') 31 | # yzdata += copy_metadata('bokeh') 32 | # yzdata += copy_metadata('xyzservices') 33 | 34 | a = Analysis([f'{spec_root}/ledfx/__main__.py'], 35 | pathex=[f'{spec_root}', f'{spec_root}/ledfx'], 36 | binaries=[], 37 | datas=yzdata, 38 | hiddenimports=hiddenimports, 39 | hookspath=[f'{venv_root}/lib/site-packages/pyupdater/hooks'], 40 | runtime_hooks=[], 41 | excludes=[], 42 | win_no_prefer_redirects=False, 43 | win_private_assemblies=False, 44 | cipher=block_cipher, 45 | noarchive=False) 46 | pyz = PYZ(a.pure, a.zipped_data, 47 | cipher=block_cipher) 48 | exe = EXE(pyz, 49 | a.scripts, 50 | [], 51 | exclude_binaries=True, 52 | name='LedFx_v2', 53 | debug=False, 54 | bootloader_ignore_signals=False, 55 | strip=False, 56 | upx=True, 57 | console=False, 58 | # target_arch='universal2', 59 | # target_arch='arm64', 60 | # target_arch='x86_64', 61 | icon=f'{spec_root}/ledfx_assets/logo.icns') 62 | app = BUNDLE(exe, 63 | a.binaries, 64 | a.zipfiles, 65 | a.datas, 66 | name='LedFx_v2', 67 | icon=f'{spec_root}/ledfx_assets/logo.icns', 68 | bundle_identifier='com.blade.ledfx', 69 | version=f'{PROJECT_VERSION}', 70 | info_plist={ 71 | 'CFBundleShortVersionString': f'{PROJECT_VERSION}', 72 | 'CFBundleVersion': f'{PROJECT_VERSION}', 73 | 'LSApplicationCategoryType': 'public.app-category.music', 74 | 'NSHumanReadableCopyright': 'Copyright © 2024 YeonV aka Blade', 75 | 'NSPrincipalClass': 'NSApplication', 76 | 'NSAppleScriptEnabled': False, 77 | 'NSMicrophoneUsageDescription': 'LedFx uses audio for sound visualization', 78 | 'com.apple.security.device.audio-input': True, 79 | 'com.apple.security.device.microphone': True, 80 | }, 81 | entitlements_plist={ 82 | 'com.apple.security.device.audio-input': True, 83 | 'com.apple.security.device.microphone': True, 84 | }) 85 | # Cleanup ledfx.env 86 | os.remove("ledfx.env") 87 | -------------------------------------------------------------------------------- /tools/mac/mac.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | import os 3 | from hiddenimports import hiddenimports 4 | from ledfx.consts import PROJECT_VERSION 5 | # from PyInstaller.utils.hooks import copy_metadata 6 | # from PyInstaller.utils.hooks import collect_data_files 7 | 8 | spec_root = os.path.abspath(SPECPATH) 9 | venv_root = os.path.abspath(os.path.join(SPECPATH, '..')) 10 | block_cipher = None 11 | 12 | # Remove the ledfx.env file if it exists 13 | os.remove("ledfx.env") if os.path.exists("ledfx.env") else None 14 | 15 | # Get environment variables 16 | github_sha_value = os.getenv('GITHUB_SHA') 17 | 18 | # Initialize variables 19 | variables = [f"GITHUB_SHA = {github_sha_value}"] 20 | variables.append('IS_RELEASE = false') 21 | 22 | # Write to ledfx.env file 23 | with open('ledfx.env', 'a') as file: 24 | file.write('\n'.join(variables)) 25 | 26 | print(venv_root) 27 | print(f'{spec_root}') 28 | yzdata = [(f'{spec_root}/ledfx_frontend', 'ledfx_frontend/'), (f'{spec_root}/ledfx/', 'ledfx/'), (f'{spec_root}/ledfx_assets', 'ledfx_assets/'),(f'{spec_root}/ledfx_assets/tray.png','.'), (f'{spec_root}/ledfx.env','.')] 29 | # yzdata += collect_data_files('bokeh') 30 | # yzdata += collect_data_files('xyzservices') 31 | # yzdata += copy_metadata('bokeh') 32 | # yzdata += copy_metadata('xyzservices') 33 | 34 | a = Analysis([f'{spec_root}/ledfx/__main__.py'], 35 | pathex=[f'{spec_root}', f'{spec_root}/ledfx'], 36 | binaries=[], 37 | datas=yzdata, 38 | hiddenimports=hiddenimports, 39 | hookspath=[f'{venv_root}/lib/site-packages/pyupdater/hooks'], 40 | runtime_hooks=[], 41 | excludes=[], 42 | win_no_prefer_redirects=False, 43 | win_private_assemblies=False, 44 | cipher=block_cipher, 45 | noarchive=False) 46 | pyz = PYZ(a.pure, a.zipped_data, 47 | cipher=block_cipher) 48 | exe = EXE(pyz, 49 | a.scripts, 50 | [], 51 | exclude_binaries=True, 52 | name='LedFx_v2', 53 | debug=False, 54 | bootloader_ignore_signals=False, 55 | strip=False, 56 | upx=True, 57 | console=False, 58 | icon=f'{spec_root}/ledfx_assets/logo.icns') 59 | app = BUNDLE(exe, 60 | a.binaries, 61 | a.zipfiles, 62 | a.datas, 63 | name='LedFx_v2', 64 | icon=f'{spec_root}/ledfx_assets/logo.icns', 65 | bundle_identifier='com.blade.ledfx', 66 | version=f'{PROJECT_VERSION}', 67 | info_plist={ 68 | 'CFBundleShortVersionString': f'{PROJECT_VERSION}', 69 | 'CFBundleVersion': f'{PROJECT_VERSION}', 70 | 'LSApplicationCategoryType': 'public.app-category.music', 71 | 'NSHumanReadableCopyright': 'Copyright © 2024 YeonV aka Blade', 72 | 'NSPrincipalClass': 'NSApplication', 73 | 'NSAppleScriptEnabled': False, 74 | 'NSMicrophoneUsageDescription': 'LedFx uses audio for sound visualization', 75 | 'com.apple.security.device.audio-input': True, 76 | 'com.apple.security.device.microphone': True, 77 | }, 78 | entitlements_plist={ 79 | 'com.apple.security.device.audio-input': True, 80 | 'com.apple.security.device.microphone': True, 81 | }) 82 | # Cleanup ledfx.env 83 | os.remove("ledfx.env") 84 | -------------------------------------------------------------------------------- /tools/mac/numpy-1.23.3-cp39-cp39-macosx_10_9_x86_64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/mac/numpy-1.23.3-cp39-cp39-macosx_10_9_x86_64.whl -------------------------------------------------------------------------------- /tools/mac/selfhosted.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import platform 4 | import shutil 5 | import glob 6 | import os 7 | 8 | def link_homebrew_tool(dir, formula_dir): 9 | shutil.rmtree(dir, ignore_errors=True) 10 | os.makedirs(dir, exist_ok=True) 11 | x64_complete = os.path.join(tool_dir, 'x64.complete') 12 | x86_complete = os.path.join(tool_dir, 'x86.complete') 13 | open(x64_complete, 'x') if not os.path.isfile(x64_complete) else 0 14 | open(x86_complete, 'x') if not os.path.isfile(x86_complete) else 0 15 | 16 | os.symlink(formula_dir, os.path.join(dir, 'x64'), target_is_directory=True) 17 | os.symlink(formula_dir, os.path.join(dir, 'x86'), target_is_directory=True) 18 | return 19 | 20 | tool_cache_dir = os.path.dirname(os.path.abspath(__file__)) 21 | homebrew_root = '/opt/homebrew' if platform.processor() == 'arm' else '/usr/local' 22 | homebrew_cellar = os.path.join(homebrew_root, 'Cellar') 23 | for formula in glob.glob(os.path.join(homebrew_cellar, '*/*/')): 24 | rel_dir = os.path.relpath(formula, homebrew_cellar) 25 | tool_dir = os.path.join(tool_cache_dir, rel_dir) 26 | link_homebrew_tool(tool_dir, formula) 27 | -------------------------------------------------------------------------------- /tools/sentry.patch: -------------------------------------------------------------------------------- 1 | diff --git a/hiddenimports.py b/hiddenimports.py 2 | index c92e3418..40d0596e 100644 3 | --- a/hiddenimports.py 4 | +++ b/hiddenimports.py 5 | @@ -29,13 +29,5 @@ hiddenimports = [ 6 | "PIL.Image", 7 | "PIL.ImageDraw", 8 | "PIL.ImageEnhance", 9 | - "sentry_sdk.integrations.stdlib", 10 | - "sentry_sdk.integrations.excepthook", 11 | - "sentry_sdk.integrations.dedupe", 12 | - "sentry_sdk.integrations.atexit", 13 | - "sentry_sdk.integrations.modules", 14 | - "sentry_sdk.integrations.argv", 15 | - "sentry_sdk.integrations.logging", 16 | - "sentry_sdk.integrations.threading", 17 | "vnoise", 18 | ] 19 | diff --git a/ledfx/__main__.py b/ledfx/__main__.py 20 | index cc720dfe..d99566dd 100644 21 | --- a/ledfx/__main__.py 22 | +++ b/ledfx/__main__.py 23 | @@ -16,8 +16,6 @@ import os 24 | import sys 25 | from logging.handlers import RotatingFileHandler 26 | 27 | -from ledfx.sentry_config import setup_sentry 28 | - 29 | try: 30 | import psutil 31 | 32 | @@ -269,8 +267,6 @@ def main(): 33 | else: 34 | p.nice(15) 35 | 36 | - if args.offline_mode is False: 37 | - setup_sentry() 38 | 39 | if args.sentry_test: 40 | _LOGGER.warning("Steering LedFx into a brick wall.") 41 | diff --git a/ledfx/sentry_config.py b/ledfx/sentry_config.py 42 | deleted file mode 100644 43 | index 849bb723..00000000 44 | --- a/ledfx/sentry_config.py 45 | +++ /dev/null 46 | @@ -1,62 +0,0 @@ 47 | -import logging 48 | -import os 49 | - 50 | -import sentry_sdk 51 | -from sentry_sdk.integrations.aiohttp import AioHttpIntegration 52 | - 53 | -from ledfx.consts import PROJECT_VERSION 54 | -from ledfx.utils import currently_frozen 55 | - 56 | -_LOGGER = logging.getLogger(__name__) 57 | - 58 | - 59 | -def setup_sentry(): 60 | - """ 61 | - Set up the Sentry configuration based on the environment variables. 62 | - If running in development mode, a development Sentry DSN is used along with a sample rate of 0. 63 | - If running in production mode, a production Sentry DSN is used along with a sample rate of 0. 64 | - The release version is determined based on the project version and the git commit hash. 65 | - """ 66 | - is_release = os.getenv("IS_RELEASE", "false").lower() 67 | - 68 | - if is_release == "false": 69 | - _LOGGER.debug("Running in development mode.") 70 | - sentry_dsn = "https://b192934eebd517c86bf7e9c512b3888a@o482797.ingest.sentry.io/4506350241841152" 71 | - # Change sample_rate to 1 to look at http calls, so all rest traffic stats 72 | - sample_rate = 0 73 | - 74 | - try: 75 | - if currently_frozen(): 76 | - commit_hash = os.getenv("GITHUB_SHA", "unknown") 77 | - else: 78 | - from subprocess import PIPE, Popen 79 | - 80 | - process = Popen(["git", "rev-parse", "HEAD"], stdout=PIPE) 81 | - (commit_hash, err) = process.communicate() 82 | - commit_hash = commit_hash[:7].decode("utf-8") 83 | - exit_code = process.wait() 84 | - # TODO: trap explicit exceptions if it becomes clear what they are 85 | - except Exception as e: 86 | - commit_hash = "unknown" 87 | - _LOGGER.warning(f"Failed to get git commit hash: {e}") 88 | - finally: 89 | - commit_hash = commit_hash[:7] 90 | - release = f"ledfx@{PROJECT_VERSION}-{commit_hash}" 91 | - else: 92 | - _LOGGER.debug("Running in production mode.") 93 | - # production / release behaviour due to injection of "prod" or anything really into ENVIRONMENT env variable 94 | - sentry_dsn = "https://dc6070345a8dfa1f2f24433d16f7a133@o482797.ingest.sentry.io/4506350233321472" 95 | - sample_rate = 0 96 | - release = f"ledfx@{PROJECT_VERSION}" 97 | - 98 | - _LOGGER.info("Sentry Configuration:") 99 | - _LOGGER.info(f"DSN (first ten): {sentry_dsn[8:18]}") 100 | - _LOGGER.info(f"Sample rate: {sample_rate}") 101 | - _LOGGER.info(f"LedFx release: {release}") 102 | - 103 | - sentry_sdk.init( 104 | - sentry_dsn, 105 | - traces_sample_rate=sample_rate, 106 | - integrations=[AioHttpIntegration()], 107 | - release=release, 108 | - ) 109 | diff --git a/pyproject.toml b/pyproject.toml 110 | index e8e317fd..73579deb 100644 111 | --- a/pyproject.toml 112 | +++ b/pyproject.toml 113 | @@ -22,7 +22,6 @@ dependencies = [ 114 | "python-rtmidi>=1.5.8", 115 | "requests>=2.31.0", 116 | "sacn>=1.9.0", 117 | - "sentry-sdk>=1.40.4", 118 | "sounddevice>=0.4.6", 119 | "samplerate>=0.2.1", 120 | "icmplib>=3.0.4", 121 | -------------------------------------------------------------------------------- /tools/sentry_android.patch: -------------------------------------------------------------------------------- 1 | diff --git a/buildozer.spec b/buildozer.spec 2 | index 41ad7de..4cf2841 100644 3 | --- a/buildozer.spec 4 | +++ b/buildozer.spec 5 | @@ -28,6 +28,7 @@ source.include_exts = py,png,jpg,kv,atlas 6 | 7 | # (list) List of directory to exclude (leave empty to not exclude anything) 8 | #source.exclude_dirs = tests, bin, venv 9 | +source.exclude_dirs = Lib/test 10 | 11 | # (list) List of exclusions using pattern matching 12 | # Do not prefix with './' 13 | diff --git a/recipes/ledfx/__init__.py b/recipes/ledfx/__init__.py 14 | index 824ea11..f78d1b8 100644 15 | --- a/recipes/ledfx/__init__.py 16 | +++ b/recipes/ledfx/__init__.py 17 | @@ -41,7 +41,6 @@ class LedFxRecipe(PyProjectRecipe): 18 | 'python-dotenv>=1.0.0,<2.0.0', 19 | 'vnoise>=0.1.0,<1.0.0', 20 | 'webcolors>=24', 21 | - 'sentry-sdk>=1.40.4' 22 | ] 23 | 24 | 25 | -------------------------------------------------------------------------------- /tools/win/aubio-0.5.0a0-cp310-cp310-win_amd64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/win/aubio-0.5.0a0-cp310-cp310-win_amd64.whl -------------------------------------------------------------------------------- /tools/win/aubio-0.5.0a0-cp312-cp312-win_amd64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/win/aubio-0.5.0a0-cp312-cp312-win_amd64.whl -------------------------------------------------------------------------------- /tools/win/aubio-0.5.0a0-cp39-cp39-win_amd64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/win/aubio-0.5.0a0-cp39-cp39-win_amd64.whl -------------------------------------------------------------------------------- /tools/win/hook-samplerate.py: -------------------------------------------------------------------------------- 1 | 2 | """ 3 | samplerate: 4 | https://github.com/tuxu/python-samplerate/ 5 | """ 6 | 7 | import os 8 | 9 | from PyInstaller.compat import is_darwin, is_win 10 | from PyInstaller.utils.hooks import get_package_paths 11 | 12 | sfp = get_package_paths("samplerate") 13 | 14 | path = None 15 | if is_win: 16 | path = os.path.join(sfp[0], "samplerate", "_samplerate_data") 17 | elif is_darwin: 18 | path = os.path.join( 19 | sfp[0], "samplerate", "_samplerate_data", "libsamplerate.dylib" 20 | ) 21 | 22 | if path is not None and os.path.exists(path): 23 | binaries = [(path, 24 | os.path.join("samplerate", "_samplerate_data"))] -------------------------------------------------------------------------------- /tools/win/install-yarn.bat: -------------------------------------------------------------------------------- 1 | npm --silent --location=global install yarn 2 | -------------------------------------------------------------------------------- /tools/win/libportaudio64bit.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/win/libportaudio64bit.dll -------------------------------------------------------------------------------- /tools/win/libsamplerate-32bit.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/win/libsamplerate-32bit.dll -------------------------------------------------------------------------------- /tools/win/libsamplerate-64bit.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/win/libsamplerate-64bit.dll -------------------------------------------------------------------------------- /tools/win/numpy-1.22.4+vanilla-cp310-cp310-win_amd64.whl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YeonV/LedFx-Builds/2e061c4bd169857d31a34cbd2f93584d729ca4c5/tools/win/numpy-1.22.4+vanilla-cp310-cp310-win_amd64.whl -------------------------------------------------------------------------------- /tools/win/req.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.7.4.post0 2 | aiohttp-cors==0.7.0 3 | altgraph==0.17.2 4 | appdirs==1.4.4 5 | async-timeout==3.0.1 6 | attrs==21.4.0 7 | beautifulsoup4==4.11.1 8 | bsdiff4==1.2.2 9 | certifi==2022.6.15 10 | cffi==1.15.1 11 | chardet==3.0.4 12 | charset-normalizer==2.1.0 13 | Cython==3.0.0a10 14 | Deprecated==1.2.13 15 | docopt==0.6.2 16 | dsdev-utils==1.3.0 17 | future==0.18.2 18 | idna==3.3 19 | ifaddr==0.2.0 20 | Js2Py==0.71 21 | -e git+https://github.com/LedFx/LedFx@87a3c95300dcaf4a310c60e4b9c0198764095328#egg=ledfx 22 | mido==1.2.10 23 | multidict==5.0.2 24 | numpy==1.23.1 25 | openrgb-python==0.2.15 26 | packaging==21.3 27 | paho-mqtt==1.6.1 28 | pbr==5.9.0 29 | pefile==2022.5.30 30 | Pillow==9.2.0 31 | pipwin==0.5.2 32 | psutil==5.9.1 33 | pycparser==2.21 34 | pyinstaller==5.2 35 | pyinstaller-hooks-contrib==2022.8 36 | pyjsparser==2.7.1 37 | PyNaCl==1.5.0 38 | pyparsing==3.0.9 39 | PyPrind==2.11.3 40 | pyserial==3.5 41 | pySmartDL==1.3.4 42 | pystray==0.17.0 43 | python-rtmidi==1.4.9 44 | pytz-deprecation-shim==0.1.0.post0 45 | PyUpdater==4.0+3.gd408f54 46 | pywin32-ctypes==0.2.0 47 | requests==2.28.1 48 | sacn==1.6.4 49 | samplerate==0.1.0 50 | sentry-sdk==1.4.3 51 | six==1.16.0 52 | sounddevice==0.4.4 53 | soupsieve==2.3.2.post1 54 | stevedore==3.5.0 55 | tcp-latency==0.0.12 56 | typing_extensions==4.3.0 57 | tzdata==2022.1 58 | tzlocal==4.2 59 | urllib3==1.26.10 60 | voluptuous==0.12.2 61 | wrapt==1.14.1 62 | yappi==1.3.5 63 | yarl==1.7.2 64 | zeroconf==0.30.0 65 | -------------------------------------------------------------------------------- /tools/win/version-bump.ps1: -------------------------------------------------------------------------------- 1 | (Get-Content "src\\ledfx\\consts.py") -replace "CONFIG_MICRO_VERSION ", "CONFIG_MICRO__YZ_VERSION " | Set-Content "src\\ledfx\\consts.py" 2 | 3 | (Get-Content "src\\ledfx\\consts.py") -replace "MICRO_VERSION = \d+", "MICRO_VERSION = $args" | Set-Content "src\\ledfx\\consts.py" 4 | 5 | (Get-Content "src\\ledfx\\consts.py") -replace "CONFIG_MICRO__YZ_VERSION ", "CONFIG_MICRO_VERSION " | Set-Content "src\\ledfx\\consts.py" 6 | -------------------------------------------------------------------------------- /tools/win/version-bump2.ps1: -------------------------------------------------------------------------------- 1 | $versionNumber = $args[0] # get the first argument 2 | 3 | (Get-Content "ledfx\\consts.py") -replace "PROJECT_VERSION = \d+", "PROJECT_VERSION = $versionNumber" | Set-Content "ledfx\\consts.py" 4 | 5 | (Get-Content "pyproject.toml") -replace "version = \d+", "version = $versionNumber" | Set-Content "pyproject.toml" 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tools/win/win-gh.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | import os 3 | from hiddenimports import hiddenimports 4 | spec_root = os.path.abspath(SPECPATH) 5 | 6 | venv_root = os.path.abspath(os.path.join(SPECPATH, '..')) 7 | block_cipher = None 8 | print(venv_root) 9 | 10 | 11 | a = Analysis([f'{spec_root}/ledfx/__main__.py'], 12 | pathex=[f'{spec_root}', f'{spec_root}/ledfx'], 13 | binaries=[], 14 | datas=[(f'{spec_root}/ledfx_frontend', 'ledfx_frontend/'), (f'{spec_root}/ledfx/', 'ledfx/'), (f'{spec_root}/ledfx_assets', 'ledfx_assets/'),(f'{spec_root}/ledfx_assets/tray.png','.')], 15 | hiddenimports=hiddenimports, 16 | hookspath=[f'{venv_root}/lib/site-packages/pyupdater/hooks'], 17 | runtime_hooks=[], 18 | excludes=[], 19 | win_no_prefer_redirects=False, 20 | win_private_assemblies=False, 21 | cipher=block_cipher, 22 | noarchive=False) 23 | pyz = PYZ(a.pure, a.zipped_data, 24 | cipher=block_cipher) 25 | exe = EXE(pyz, 26 | a.scripts, 27 | [], 28 | exclude_binaries=True, 29 | name='LedFx', 30 | debug=False, 31 | bootloader_ignore_signals=False, 32 | strip=False, 33 | upx=True, 34 | console=False, 35 | icon=f'{spec_root}/ledfx_assets/discord.ico') 36 | coll = COLLECT(exe, 37 | a.binaries, 38 | a.zipfiles, 39 | a.datas, 40 | strip=False, 41 | upx=True, 42 | upx_exclude=[], 43 | name='LedFx') 44 | -------------------------------------------------------------------------------- /tools/win/win-ghyz.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | import os 3 | from hiddenimports import hiddenimports 4 | spec_root = os.path.abspath(SPECPATH) 5 | 6 | venv_root = os.path.abspath(os.path.join(SPECPATH, '..')) 7 | block_cipher = None 8 | print(venv_root) 9 | 10 | a = Analysis([f'{spec_root}\\ledfx\\__main__.py'], 11 | pathex=[f'{spec_root}', f'{spec_root}\\ledfx'], 12 | binaries=[], 13 | datas=[(f'{spec_root}/ledfx_frontend', 'ledfx_frontend/'), (f'{spec_root}/ledfx/', 'ledfx/'), (f'{spec_root}/ledfx_assets', 'ledfx_assets/'), (f'{spec_root}/ledfx_assets/tray.png','.')], 14 | hiddenimports=hiddenimports, 15 | hookspath=[f'{venv_root}\\lib\\site-packages\\pyupdater\\hooks'], 16 | runtime_hooks=[], 17 | excludes=[], 18 | win_no_prefer_redirects=False, 19 | win_private_assemblies=False, 20 | cipher=block_cipher, 21 | noarchive=False) 22 | pyz = PYZ(a.pure, a.zipped_data, 23 | cipher=block_cipher) 24 | exe = EXE(pyz, 25 | a.scripts, 26 | a.binaries, 27 | a.zipfiles, 28 | a.datas, 29 | name='LedFx', 30 | debug=False, 31 | bootloader_ignore_signals=False, 32 | strip=False, 33 | upx=True, 34 | console=False, 35 | icon=f'{spec_root}/ledfx_assets/discord.ico') 36 | -------------------------------------------------------------------------------- /tools/win/win.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | import os 3 | from hiddenimports import hiddenimports 4 | from PyInstaller.utils.hooks import copy_metadata 5 | from PyInstaller.utils.hooks import collect_data_files 6 | spec_root = os.path.abspath(SPECPATH) 7 | 8 | venv_root = os.path.abspath(os.path.join(SPECPATH, '..')) 9 | block_cipher = None 10 | print(venv_root) 11 | # Create prod.env for the packaged binaries to read from 12 | with open('prod.env', 'w') as file: 13 | file.write('IS_RELEASE = true') 14 | 15 | yzdata = [(f'{spec_root}/ledfx_frontend', 'ledfx_frontend/'), (f'{spec_root}/ledfx/', 'ledfx/'), (f'{spec_root}/ledfx_assets', 'ledfx_assets/'),(f'{spec_root}/ledfx_assets/tray.png','.'), (f'{spec_root}/prod.env','.')] 16 | # yzdata += collect_data_files('bokeh') 17 | # yzdata += collect_data_files('xyzservices') 18 | # yzdata += copy_metadata('bokeh') 19 | # yzdata += copy_metadata('xyzservices') 20 | 21 | a = Analysis([f'{spec_root}\\ledfx\\__main__.py'], 22 | pathex=[f'{spec_root}', f'{spec_root}\\ledfx'], 23 | binaries=[], 24 | datas=yzdata, 25 | hiddenimports=hiddenimports, 26 | hookspath=[f'{venv_root}\\lib\\site-packages\\pyupdater\\hooks'], 27 | runtime_hooks=[], 28 | excludes=[], 29 | win_no_prefer_redirects=False, 30 | win_private_assemblies=False, 31 | cipher=block_cipher, 32 | noarchive=False) 33 | pyz = PYZ(a.pure, a.zipped_data, 34 | cipher=block_cipher) 35 | exe = EXE(pyz, 36 | a.scripts, 37 | [], 38 | exclude_binaries=True, 39 | name='LedFx', 40 | debug=False, 41 | bootloader_ignore_signals=False, 42 | strip=False, 43 | upx=True, 44 | console=False, 45 | icon=f'{spec_root}\\ledfx_assets\\discord.ico') 46 | coll = COLLECT(exe, 47 | a.binaries, 48 | a.zipfiles, 49 | a.datas, 50 | strip=False, 51 | upx=True, 52 | upx_exclude=[], 53 | name='LedFx') 54 | # Cleanup prod.env 55 | os.remove("prod.env") 56 | -------------------------------------------------------------------------------- /tools/win/yzwin.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | import os 3 | from hiddenimports import hiddenimports 4 | from PyInstaller.utils.hooks import copy_metadata 5 | from PyInstaller.utils.hooks import collect_data_files 6 | spec_root = os.path.abspath(SPECPATH) 7 | 8 | venv_root = os.path.abspath(os.path.join(SPECPATH, '..')) 9 | block_cipher = None 10 | print(venv_root) 11 | yzdata = [(f'{spec_root}/ledfx_frontend', 'ledfx_frontend/'), (f'{spec_root}/ledfx/', 'ledfx/'), (f'{spec_root}/ledfx_assets', 'ledfx_assets/'),(f'{spec_root}/ledfx_assets/tray.png','.')] 12 | # yzdata += collect_data_files('bokeh') 13 | # yzdata += collect_data_files('xyzservices') 14 | # yzdata += copy_metadata('bokeh') 15 | # yzdata += copy_metadata('xyzservices') 16 | 17 | a = Analysis([f'{spec_root}\\ledfx\\__main__.py'], 18 | pathex=[f'{spec_root}', f'{spec_root}\\ledfx'], 19 | binaries=[], 20 | datas=yzdata, 21 | hiddenimports=hiddenimports, 22 | hookspath=[f'{venv_root}\\lib\\site-packages\\pyupdater\\hooks'], 23 | runtime_hooks=[], 24 | excludes=[], 25 | win_no_prefer_redirects=False, 26 | win_private_assemblies=False, 27 | cipher=block_cipher, 28 | noarchive=False) 29 | pyz = PYZ(a.pure, a.zipped_data, 30 | cipher=block_cipher) 31 | exe = EXE(pyz, 32 | a.scripts, 33 | a.binaries, 34 | a.zipfiles, 35 | a.datas, 36 | name='LedFx', 37 | debug=False, 38 | bootloader_ignore_signals=False, 39 | strip=False, 40 | upx=True, 41 | console=False, 42 | icon=f'{spec_root}\\ledfx_assets\\discord.ico') 43 | --------------------------------------------------------------------------------