diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d5f2951..a3e1de4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,6 @@ on: jobs: test: - runs-on: ubuntu-latest strategy: matrix: @@ -118,10 +117,30 @@ jobs: uses: actions/setup-python@v5 with: python-version: 3.12 - - name: Install dependencies + - name: Ensure build environment + shell: powershell run: | - C:\Miniconda\condabin\conda.bat env update --file conda_windows.yml --name base - C:\Miniconda\condabin\conda.bat init powershell + $envName="eos_build" + $envFile="conda_windows.yml" + $hashFile="$env:TEMP\$envName.hash" + + $newHash = (Get-FileHash $envFile).Hash + + if (!(Test-Path $hashFile)) { + $rebuild = $true + } else { + $oldHash = Get-Content $hashFile + $rebuild = $oldHash -ne $newHash + } + + if ($rebuild) { + Write-Host "Environment changed → rebuilding" + micromamba env remove -n $envName -y 2>$null + micromamba create -n $envName -f $envFile -y + $newHash | Out-File $hashFile + } else { + Write-Host "Environment unchanged → using cached env" + } - name: Build with pyinstaller run: | pyinstaller windows_build.spec diff --git a/conda_windows.yml b/conda_windows.yml index 9fd9d82..81703d8 100644 --- a/conda_windows.yml +++ b/conda_windows.yml @@ -1,44 +1,68 @@ name: eos_build channels: - - defaults + - conda-forge dependencies: - - altgraph=0.17.3=py312haa95532_0 - - blas=1.0=mkl - - bzip2=1.0.8=h2bbff1b_6 - - ca-certificates=2024.11.26=haa95532_0 - - expat=2.6.3=h5da7b33_0 - - h5py=3.12.1=py312h3b2c811_0 - - hdf5=1.12.1=h51c971a_3 - - icc_rt=2022.1.0=h6049295_2 - - intel-openmp=2023.1.0=h59b6b97_46320 - - libffi=3.4.4=hd77b12b_1 - - llvmlite=0.43.0=py312hf2fb9eb_0 - - mkl=2023.1.0=h6b88ed4_46358 - - mkl-service=2.4.0=py312h2bbff1b_1 - - mkl_fft=1.3.11=py312h827c3e9_0 - - mkl_random=1.2.8=py312h0158946_0 - - numba=0.60.0=py312h0158946_0 - - numpy=1.26.4=py312hfd52020_0 - - numpy-base=1.26.4=py312h4dde369_0 - - openssl=3.0.15=h827c3e9_0 - - packaging=24.1=py312haa95532_0 - - pefile=2023.2.7=py312haa95532_0 - - pip=24.2=py312haa95532_0 - - pyinstaller=6.9.0=py312h0416ee5_0 - - pyinstaller-hooks-contrib=2024.7=py312haa95532_0 - - python=3.12.7=h14ffc60_0 - - pywin32-ctypes=0.2.2=py312haa95532_0 - - setuptools=75.1.0=py312haa95532_0 - - sqlite=3.45.3=h2bbff1b_0 - - tbb=2021.8.0=h59b6b97_0 - - tk=8.6.14=h0416ee5_0 - - tzdata=2024b=h04d1e81_0 - - vc=14.40=h2eaa2aa_1 - - vs2015_runtime=14.40.33807=h98bb1dd_1 - - wheel=0.44.0=py312haa95532_0 - - xz=5.4.6=h8cc25b3_1 - - zlib=1.2.13=h8cc25b3_1 + - altgraph=0.17.5=pyhd8ed1ab_0 + - bzip2=1.0.8=h0ad9c76_9 + - ca-certificates=2026.2.25=h4c7d964_0 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - flexcache=0.3=pyhd8ed1ab_1 + - flexparser=0.4=pyhd8ed1ab_1 + - future=1.0.0=pyhd8ed1ab_2 + - h5py=3.15.1=nompi_py312h03cd2ba_101 + - hdf5=1.14.6=nompi_hae35d4c_106 + - icu=78.2=h637d24d_0 + - importlib-metadata=8.7.0=pyhe01879c_1 + - krb5=1.22.2=h0ea6238_0 + - libaec=1.1.5=haf901d7_0 + - libblas=3.11.0=5_hf2e6a31_mkl + - libcblas=3.11.0=5_h2a3cdd5_mkl + - libcurl=8.19.0=h8206538_0 + - libexpat=2.7.4=hac47afa_0 + - libffi=3.5.2=h3d046cb_0 + - libhwloc=2.12.2=default_h4379cf1_1000 + - libiconv=1.18=hc1393d2_2 + - liblapack=3.11.0=5_hf9ab0e9_mkl + - liblzma=5.8.2=hfd05255_0 + - libsqlite=3.52.0=hf5d6505_0 + - libssh2=1.11.1=h9aa295b_0 + - libwinpthread=12.0.0.r4.gg4f2fc60ca=h57928b3_10 + - libxml2=2.15.2=h779ef1b_0 + - libxml2-16=2.15.2=h3cfd58e_0 + - libzlib=1.3.1=h2466b09_2 + - llvm-openmp=22.1.0=h4fa8253_0 + - llvmlite=0.46.0=py312hdb9728c_0 + - mkl=2025.3.0=hac47afa_455 + - numba=0.64.0=py312h560f1c9_0 + - numpy=2.4.2=py312ha72d056_1 + - openssl=3.6.1=hf411b9b_1 + - packaging=26.0=pyhcf101f3_0 + - pefile=2023.2.7=pyhd8ed1ab_0 + - pint=0.25.2=pyhcf101f3_0 + - pip=26.0.1=pyh8b19718_0 + - platformdirs=4.9.4=pyhcf101f3_0 + - pyinstaller=6.19.0=py312hf4647a0_1 + - pyinstaller-hooks-contrib=2026.2=pyhd8ed1ab_0 + - python=3.12.13=h0159041_0_cpython + - python_abi=3.12=8_cp312 + - pywin32=311=py312h829343e_1 + - pywin32-ctypes=0.2.3=py312h2e8e312_3 + - pyyaml=6.0.3=py312h05f76fc_1 + - setuptools=82.0.1=pyh332efcf_0 + - tabulate=0.10.0=pyhcf101f3_0 + - tbb=2022.3.0=h3155e25_2 + - tk=8.6.13=h6ed50ae_3 + - typing-extensions=4.15.0=h396c80c_0 + - typing_extensions=4.15.0=pyhcf101f3_0 + - ucrt=10.0.26100.0=h57928b3_0 + - vc=14.3=h41ae7f8_34 + - vc14_runtime=14.44.35208=h818238b_34 + - vcomp14=14.44.35208=h818238b_34 + - wheel=0.46.3=pyhd8ed1ab_0 + - yaml=0.2.5=h6a83c73_3 + - zipp=3.23.0=pyhcf101f3_1 + - zstd=1.5.7=h534d264_6 - pip: - - orsopy==1.2.1 - - pyyaml==6.0.2 - - tzdata \ No newline at end of file + - orsopy==1.2.2 + - tzdata diff --git a/windows_build.spec b/windows_build.spec index 4ca0124..a7d95a1 100644 --- a/windows_build.spec +++ b/windows_build.spec @@ -40,10 +40,47 @@ exe = EXE( codesign_identity=None, entitlements_file=None, ) + +a2 = Analysis( + ['eos/ls.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=1, +) +pyz2 = PYZ(a2.pure) + +exe2 = EXE( + pyz2, + a2.scripts, + [], + exclude_binaries=True, + name='eosls', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) + coll = COLLECT( exe, a.binaries, a.datas, + exe2, + a2.binaries, + a2.datas, strip=False, upx=True, upx_exclude=[],