From 41c8754126b5a69b70860b785c079ee4bf883868 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 15:26:53 -0400 Subject: [PATCH 01/17] Add newlines to post_install scripts. --- rerender.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rerender.py b/rerender.py index 26ce1ab..f03b268 100755 --- a/rerender.py +++ b/rerender.py @@ -105,10 +105,10 @@ def render_constructor_specs( # write the post_install scripts referenced in the construct dict if platform.startswith("win"): with (constructor_dir / "post_install.bat").open("w") as f: - f.writelines((r"del /q %PREFIX%\pkgs\*.tar.bz2", "")) + f.write("\n".join((r"del /q %PREFIX%\pkgs\*.tar.bz2", ""))) else: with (constructor_dir / "post_install.sh").open("w") as f: - f.writelines((r"rm -f $PREFIX/pkgs/*.tar.bz2", "")) + f.write("\n".join((r"rm -f $PREFIX/pkgs/*.tar.bz2", ""))) construct_yaml_path = constructor_dir / "construct.yaml" with construct_yaml_path.open("w") as f: @@ -121,7 +121,7 @@ def render_constructor_specs( lockfile_contents.extend(rendered_full_lock_spec.specs) lock_file_path = constructor_dir / f"{constructor_name}.txt" with lock_file_path.open("w") as f: - f.writelines(s + "\n" for s in lockfile_contents) + f.write("\n".join(lockfile_contents)) return constructor_specs From 73b77ae44d202fd35888dcaa3020de2f0686b20c Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 15:53:41 -0400 Subject: [PATCH 02/17] Try to fix prefix in post-install script for OSX pkg installer. The pkg installer does not have any environment variables (like $PREFIX) defined, but by inspection the other scripts that it executes set the PREFIX as $2/{installer_name}. So we do that when $PREFIX is not defined, which should cover all of the installers. --- rerender.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/rerender.py b/rerender.py index f03b268..00d6d38 100755 --- a/rerender.py +++ b/rerender.py @@ -105,10 +105,20 @@ def render_constructor_specs( # write the post_install scripts referenced in the construct dict if platform.startswith("win"): with (constructor_dir / "post_install.bat").open("w") as f: - f.write("\n".join((r"del /q %PREFIX%\pkgs\*.tar.bz2", ""))) + f.write("\n".join((r"del /q %PREFIX%\pkgs\*.tar.bz2", "exit 0", ""))) else: with (constructor_dir / "post_install.sh").open("w") as f: - f.write("\n".join((r"rm -f $PREFIX/pkgs/*.tar.bz2", ""))) + f.write( + "\n".join( + ( + "#!/bin/sh", + f'PREFIX="${{PREFIX:-$2/{installer_name}}}"', + r"rm -f $PREFIX/pkgs/*.tar.bz2", + "exit 0", + "", + ) + ) + ) construct_yaml_path = constructor_dir / "construct.yaml" with construct_yaml_path.open("w") as f: From 10afb6373172d426cc785a739b39ca434b3c4c2b Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 16:23:19 -0400 Subject: [PATCH 03/17] Tweak PKG test to what I think will be the actual install path. --- .github/workflows/build_radioconda.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index 5111136..948f123 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -92,7 +92,7 @@ jobs: OS_NAME: ${{ matrix.OS_NAME }} ARCH: ${{ matrix.ARCH }} TARGET_VOLUME: CurrentUserHomeDirectory - INSTALL_PATH: ~/Applications/${{ env.DISTNAME }} + INSTALL_PATH: ~/${{ env.DISTNAME }} run: | installer -verbose -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" From e9080f350aae3ee52fa36377c7bd7d10a6a1b646 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 16:26:22 -0400 Subject: [PATCH 04/17] Try a parameter to print the pkg installer log to stderr. --- .github/workflows/build_radioconda.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index 948f123..cce2766 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -94,7 +94,7 @@ jobs: TARGET_VOLUME: CurrentUserHomeDirectory INSTALL_PATH: ~/${{ env.DISTNAME }} run: | - installer -verbose -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME + installer -verbose -dumplog -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" conda info conda list From 45f575417e0c892cb39c9b4ecc4aa5c4a11b6504 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 16:28:03 -0400 Subject: [PATCH 05/17] Restrict main radioconda to gnuradio 3.8 now that 3.9 is an option. --- radioconda.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radioconda.yaml b/radioconda.yaml index 3ffa866..41de7b7 100644 --- a/radioconda.yaml +++ b/radioconda.yaml @@ -11,11 +11,11 @@ dependencies: - ipython - python # restrict to python 3.8 on Windows for Windows 7 compatibility - - python 3.8 # [win] + - python 3.8.* # [win] - radioconda_console_shortcut # [win] - digital_rf - - gnuradio + - gnuradio 3.8.* - gnuradio-osmosdr - gnuradio-satellites - gnuradio-soapy From ae6dec548afaea502e73aef2bd23887551aadd25 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 16:37:19 -0400 Subject: [PATCH 06/17] Re-render 2021.05.19. --- .../radioconda-linux-64/construct.yaml | 42 ++--- .../radioconda-linux-64/post_install.sh | 5 +- .../radioconda-linux-64.txt | 177 ++++++++++-------- .../radioconda-osx-64/construct.yaml | 42 ++--- .../radioconda-osx-64/post_install.sh | 5 +- .../radioconda-osx-64/radioconda-osx-64.txt | 160 ++++++++-------- .../radioconda-win-64/construct.yaml | 40 ++-- .../radioconda-win-64/post_install.bat | 3 +- .../radioconda-win-64/radioconda-win-64.txt | 149 ++++++++------- 9 files changed, 330 insertions(+), 293 deletions(-) diff --git a/installer_specs/radioconda-linux-64/construct.yaml b/installer_specs/radioconda-linux-64/construct.yaml index 1d198af..41c3eea 100644 --- a/installer_specs/radioconda-linux-64/construct.yaml +++ b/installer_specs/radioconda-linux-64/construct.yaml @@ -10,29 +10,29 @@ post_install: post_install.sh register_python_default: false specs: - digital_rf=2.6.6=py39h41b17dc_1 -- gnuradio-osmosdr=0.2.3=py39h57efe72_3 -- gnuradio-satellites=3.7.0=py39h90015ce_2 -- gnuradio-soapy=2.1.3.1=py39hde3ad05_1 -- gnuradio=3.8.3.0=py39h9b1c35e_1 +- gnuradio-osmosdr=0.2.3=py39h7ffbb8f_5 +- gnuradio-satellites=3.8.0=py39h90015ce_0 +- gnuradio-soapy=2.1.3.1=py39h4c67559_3 +- gnuradio=3.8.3.0=py39hae981d9_4 - gqrx=2.14.4=hd665fa0_2 -- ipython=7.22.0=py39hef51801_0 -- libiio=0.21=py39h107f48f_4 +- ipython=7.23.1=py39hef51801_0 +- libiio=0.21=ha770c72_6 - libm2k=0.4.0=py39hfbabe7e_2 -- limesuite=20.10.0=haf62c5d_0 -- mamba=0.9.2=py39h951de11_0 -- matplotlib=3.4.1=py39hf3d152e_0 +- limesuite=20.10.0=haf62c5d_1 +- mamba=0.13.0=py39h951de11_0 +- matplotlib=3.4.2=py39hf3d152e_0 - numpy=1.20.2=py39hdbf815f_0 -- pandas=1.2.3=py39hde0f152_0 -- pyadi-iio=0.0.7=pyhd8ed1ab_0 -- python=3.9.2=hffdb5ce_0_cpython -- rtl-sdr=0.6.0=h7f98852_2 -- scipy=1.6.2=py39hee8e79c_0 -- soapysdr-module-lms7=20.10.0=h32598af_0 -- soapysdr-module-plutosdr=0.2.1=h7eaeed7_1 -- soapysdr-module-remote=0.5.2=h15b8982_1 -- soapysdr-module-rtlsdr=0.3.0=hc9558a2_0 -- soapysdr-module-uhd=0.4.1=h161985f_1 -- soapysdr=0.7.2=py39h1a9c180_4 +- pandas=1.2.4=py39hde0f152_0 +- pyadi-iio=0.0.7=pyhd8ed1ab_1 +- python=3.9.4=hffdb5ce_0_cpython +- rtl-sdr=0.6.0=h18f079d_2 +- scipy=1.6.3=py39hee8e79c_0 +- soapysdr-module-lms7=20.10.0=hbab49e3_1 +- soapysdr-module-plutosdr=0.2.1=h14e0a3d_2 +- soapysdr-module-remote=0.5.2=hee64af1_2 +- soapysdr-module-rtlsdr=0.3.0=hee64af1_1 +- soapysdr-module-uhd=0.4.1=h75dc44c_2 +- soapysdr=0.8.0=py39h1a9c180_0 - uhd=3.15.0.0=py39hfa8602a_6 -version: 2021.04.08 +version: 2021.05.19 write_condarc: true diff --git a/installer_specs/radioconda-linux-64/post_install.sh b/installer_specs/radioconda-linux-64/post_install.sh index 7c6998c..67ed389 100644 --- a/installer_specs/radioconda-linux-64/post_install.sh +++ b/installer_specs/radioconda-linux-64/post_install.sh @@ -1 +1,4 @@ -rm -f $PREFIX/pkgs/*.tar.bz2 \ No newline at end of file +#!/bin/sh +PREFIX="${PREFIX:-$2/radioconda}" +rm -f $PREFIX/pkgs/*.tar.bz2 +exit 0 diff --git a/installer_specs/radioconda-linux-64/radioconda-linux-64.txt b/installer_specs/radioconda-linux-64/radioconda-linux-64.txt index 6e48122..16c1792 100644 --- a/installer_specs/radioconda-linux-64/radioconda-linux-64.txt +++ b/installer_specs/radioconda-linux-64/radioconda-linux-64.txt @@ -1,8 +1,8 @@ # platform: linux-64 -# env_hash: b285a379986111ff037a24284d68f67d3c4e791f57cd4f5adc73e2ac5f0f7464 +# env_hash: 98859dc570002b2c1fb97f42fcb395f68c7f32ea966018ca94dba697d654ca63 _libgcc_mutex=0.1=conda_forge _openmp_mutex=4.5=1_gnu -adwaita-icon-theme=3.38.0=hbf89446_1 +adwaita-icon-theme=40.1.1=ha770c72_1 alsa-lib=1.2.3=h516909a_0 appdirs=1.4.4=pyh9f0ad1d_0 argh=0.26.2=pyh9f0ad1d_1002 @@ -11,9 +11,9 @@ at-spi2-core=2.38.0=h0630a04_3 atk-1.0=2.36.0=h3371d22_4 attr=2.4.48=h516909a_0 backcall=0.2.0=pyh9f0ad1d_0 -backports.functools_lru_cache=1.6.3=pyhd8ed1ab_0 +backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0 backports=1.0=py_2 -boost-cpp=1.74.0=hc6e9bd1_2 +boost-cpp=1.74.0=hc6e9bd1_3 brotlipy=0.7.0=py39h3811e60_1001 bzip2=1.0.8=h7f98852_4 c-ares=1.17.1=h7f98852_1 @@ -25,151 +25,162 @@ certifi=2020.12.5=py39hf3d152e_1 cffi=1.14.5=py39he32792d_0 chardet=4.0.0=py39hf3d152e_1 click-plugins=1.1.1=py_0 -click=7.1.2=pyh9f0ad1d_0 +click=8.0.0=py39hf3d152e_0 codec2=0.9.2=h516909a_1 -conda-package-handling=1.7.2=py39h38d8fee_0 -conda=4.10.0=py39hf3d152e_1 +conda-package-handling=1.7.3=py39h3811e60_0 +conda=4.10.1=py39hf3d152e_0 construct=2.9.45=py_0 cryptography=3.4.7=py39hbca0aa6_0 cycler=0.10.0=py_2 dbus=1.13.6=h48d8840_2 -decorator=5.0.6=pyhd8ed1ab_0 +decorator=5.0.9=pyhd8ed1ab_0 digital_rf=2.6.6=py39h41b17dc_1 -epoxy=1.5.5=h7f98852_0 +epoxy=1.5.7=h7f98852_0 expat=2.3.0=h9c3ff4c_0 fftw=3.3.9=nompi_hcdd671c_101 -fontconfig=2.13.1=hba837de_1004 +font-ttf-dejavu-sans-mono=2.37=hab24e00_0 +font-ttf-inconsolata=3.000=h77eed37_0 +font-ttf-source-code-pro=2.038=h77eed37_0 +font-ttf-ubuntu=0.83=hab24e00_0 +fontconfig=2.13.1=hba837de_1005 +fonts-conda-ecosystem=1=0 +fonts-conda-forge=1=0 freetype=2.10.4=h0708190_1 fribidi=1.0.10=h516909a_0 fs=2.4.11=py39hde42818_2 -gdk-pixbuf=2.42.4=h04a7f16_2 +gdk-pixbuf=2.42.6=h04a7f16_0 gettext=0.19.8.1=h0b5b191_1005 glew=2.1.0=h9c3ff4c_2 -glib-tools=2.68.0=h9c3ff4c_2 -glib=2.68.0=h9c3ff4c_2 +glib-tools=2.68.2=h9c3ff4c_0 +glib=2.68.2=h9c3ff4c_0 gmp=6.2.1=h58526e2_0 -gnuradio-core=3.8.3.0=py39hc962832_1 -gnuradio-grc=3.8.3.0=py39hc76a25d_1 -gnuradio-osmosdr=0.2.3=py39h57efe72_3 -gnuradio-qtgui=3.8.3.0=py39hbc3867e_1 -gnuradio-satellites=3.7.0=py39h90015ce_2 -gnuradio-soapy=2.1.3.1=py39hde3ad05_1 -gnuradio-uhd=3.8.3.0=py39h33996e5_1 -gnuradio-video-sdl=3.8.3.0=py39hc76a25d_1 -gnuradio-zeromq=3.8.3.0=py39h72561b3_1 -gnuradio=3.8.3.0=py39h9b1c35e_1 +gnuradio-core=3.8.3.0=py39hc962832_4 +gnuradio-grc=3.8.3.0=py39hc76a25d_4 +gnuradio-osmosdr=0.2.3=py39h7ffbb8f_5 +gnuradio-qtgui=3.8.3.0=py39hbc3867e_4 +gnuradio-satellites=3.8.0=py39h90015ce_0 +gnuradio-soapy=2.1.3.1=py39h4c67559_3 +gnuradio-uhd=3.8.3.0=py39h33996e5_4 +gnuradio-video-sdl=3.8.3.0=py39hc76a25d_4 +gnuradio-zeromq=3.8.3.0=py39h72561b3_4 +gnuradio=3.8.3.0=py39hae981d9_4 gobject-introspection=1.68.0=py39hcb793ab_1 gqrx=2.14.4=hd665fa0_2 graphite2=1.3.13=he1b5a44_1001 gsl=2.6=he838d99_2 -gst-plugins-base=1.18.4=h29181c9_0 -gstreamer=1.18.4=h76c114f_0 -gtk3=3.24.27=h2369adc_0 -h5py=3.1.0=nompi_py39h25020de_100 -harfbuzz=2.8.0=h83ec7ef_1 +gst-plugins-base=1.18.4=hf529b03_2 +gstreamer-orc=0.4.32=h7f98852_1 +gstreamer=1.18.4=h76c114f_2 +gtk3=3.24.28=h8879c87_1 +h5py=3.2.1=nompi_py39h98ba4bc_100 +harfbuzz=2.8.1=h83ec7ef_0 hdf5=1.10.6=nompi_h6a2412b_1114 hicolor-icon-theme=0.17=ha770c72_2 icu=68.1=h58526e2_0 idna=2.10=pyh9f0ad1d_0 -ipython=7.22.0=py39hef51801_0 +ipython=7.23.1=py39hef51801_0 ipython_genutils=0.2.0=py_1 -jack=0.125.0=hf484d3e_1001 +jack=1.9.18=hfd4fe87_1001 jedi=0.18.0=py39hf3d152e_2 jpeg=9d=h516909a_0 json-c=0.15=h98cffda_0 kiwisolver=1.3.1=py39h1a9c180_1 -krb5=1.17.2=h926e7f8_0 +krb5=1.19.1=hcc1bbae_0 lcms2=2.12=hddcbb42_0 ld_impl_linux-64=2.35.1=hea4e1c9_2 -libad9361-iio=0.2=hdb1fb3b_1 +libad9361-iio=0.2=h5548ebd_2 libaio=0.3.112=h516909a_0 libarchive=3.5.1=h3f442fb_1 -libblas=3.9.0=8_openblas +libblas=3.9.0=9_openblas libcap=2.48=h7f98852_0 -libcblas=3.9.0=8_openblas -libclang=11.1.0=default_ha53f305_0 -libcurl=7.76.0=hc4aaa36_0 +libcblas=3.9.0=9_openblas +libclang=11.1.0=default_ha53f305_1 +libcups=2.3.3=hf5a7f15_0 +libcurl=7.76.1=h2574ce0_2 libdb=6.2.32=he1b5a44_0 libedit=3.1.20191231=he28a2e2_2 libev=4.33=h516909a_1 libevent=2.1.10=hcdb4288_3 libffi=3.3=h58526e2_2 libflac=1.3.3=h9c3ff4c_1 -libgcc-ng=9.3.0=h2828fa1_18 -libgfortran-ng=9.3.0=hff62375_18 -libgfortran5=9.3.0=hff62375_18 -libglib=2.68.0=h3e27bee_2 +libgcc-ng=9.3.0=h2828fa1_19 +libgfortran-ng=9.3.0=hff62375_19 +libgfortran5=9.3.0=hff62375_19 +libglib=2.68.2=h3e27bee_0 libglu=9.0.0=he1b5a44_1001 -libgomp=9.3.0=h2828fa1_18 +libgomp=9.3.0=h2828fa1_19 libiconv=1.16=h516909a_0 -libiio=0.21=py39h107f48f_4 -liblapack=3.9.0=8_openblas -liblimesuite=20.10.0=h9c3ff4c_0 +libiio-c=0.21=hd53978d_6 +libiio=0.21=ha770c72_6 +liblapack=3.9.0=9_openblas +liblimesuite=20.10.0=h9c3ff4c_1 libllvm11=11.1.0=hf817b99_2 libm2k=0.4.0=py39hfbabe7e_2 libnghttp2=1.43.0=h812cca2_0 libogg=1.3.4=h7f98852_1 -libopenblas=0.3.12=pthreads_h4812303_1 +libopenblas=0.3.15=pthreads_h8fe5266_1 libopus=1.3.1=h7f98852_1 libpng=1.6.37=hed695b0_2 -libpq=13.1=hfd2b0eb_2 -librsvg=2.50.3=hfa39831_1 +libpq=13.3=hd57d9b9_0 +librsvg=2.50.5=hc3c00ef_0 libsndfile=1.0.31=h9c3ff4c_1 libsodium=1.0.18=h516909a_1 libsolv=0.7.18=h780b84a_0 libssh2=1.9.0=ha56f1ee_6 -libstdcxx-ng=9.3.0=h6de172a_18 -libtiff=4.2.0=hdc55705_0 +libstdcxx-ng=9.3.0=h6de172a_19 +libtiff=4.2.0=hbd63e13_2 libtool=2.4.6=h58526e2_1007 -libusb=1.0.24=h9f566bc_1 +libusb=1.0.24=h18f079d_4 libuuid=2.32.1=h14c3975_1000 libvorbis=1.3.7=he1b5a44_0 libwebp-base=1.2.0=h7f98852_2 libxcb=1.13=h7f98852_1003 libxkbcommon=1.0.3=he3ba5ed_0 -libxml2=2.9.10=h72842e0_3 +libxml2=2.9.12=h72842e0_0 libxslt=1.1.33=h15afd5d_2 -limesuite=20.10.0=haf62c5d_0 +limesuite=20.10.0=haf62c5d_1 log4cpp=1.1.3=he1b5a44_1002 lxml=4.6.3=py39h107f48f_0 lz4-c=1.9.3=h9c3ff4c_0 lzo=2.10=h516909a_1000 mako=1.1.4=pyh44b312d_0 -mamba=0.9.2=py39h951de11_0 -markupsafe=1.1.1=py39h3811e60_3 -matplotlib-base=3.4.1=py39h2fa2bec_0 -matplotlib=3.4.1=py39hf3d152e_0 -mysql-common=8.0.23=ha770c72_1 -mysql-libs=8.0.23=h935591d_1 +mamba=0.13.0=py39h951de11_0 +markupsafe=2.0.0=py39h3811e60_0 +matplotlib-base=3.4.2=py39h2fa2bec_0 +matplotlib-inline=0.1.2=pyhd8ed1ab_2 +matplotlib=3.4.2=py39hf3d152e_0 +mysql-common=8.0.23=ha770c72_2 +mysql-libs=8.0.23=h935591d_2 ncurses=6.2=h58526e2_4 nspr=4.30=h9c3ff4c_0 -nss=3.63=hb5efdd6_0 +nss=3.65=hb5efdd6_0 numpy=1.20.2=py39hdbf815f_0 olefile=0.46=pyh9f0ad1d_1 -openjpeg=2.4.0=hf7af979_0 +openjpeg=2.4.0=hb52868f_1 openssl=1.1.1k=h7f98852_0 packaging=20.9=pyh44b312d_0 -pandas=1.2.3=py39hde0f152_0 -pango=1.42.4=h80147aa_5 +pandas=1.2.4=py39hde0f152_0 +pango=1.48.5=hb8ff022_0 parso=0.8.2=pyhd8ed1ab_0 patchelf=0.11=he1b5a44_0 pathtools=0.1.2=py_1 pcre=8.44=he1b5a44_0 pexpect=4.8.0=pyh9f0ad1d_2 pickleshare=0.7.5=py39hde42818_1002 -pillow=8.1.2=py39hf95b381_1 +pillow=8.2.0=py39hf95b381_1 pixman=0.40.0=h36c2ea0_0 portaudio=19.6.0=hae3ed74_4 prompt-toolkit=3.0.18=pyha770c72_0 pthread-stubs=0.4=h36c2ea0_1001 ptyprocess=0.7.0=pyhd3deb0d_0 pulseaudio=14.0=hb166930_3 -pyadi-iio=0.0.7=pyhd8ed1ab_0 -pycairo=1.20.0=py39h08627d8_1 +pyadi-iio=0.0.7=pyhd8ed1ab_1 +pycairo=1.20.0=py39hedcb9fc_1 pycosat=0.6.3=py39h3811e60_1006 pycparser=2.20=pyh9f0ad1d_2 -pygments=2.8.1=pyhd8ed1ab_0 -pygobject=3.40.1=py39he5105b2_0 +pygments=2.9.0=pyhd8ed1ab_0 +pygobject=3.40.1=py39he5105b2_1 +pylibiio=0.21=py_6 pyopenssl=20.0.1=pyhd8ed1ab_0 pyparsing=2.4.7=pyh9f0ad1d_0 pyqt-impl=5.12.3=py39h0fcd23e_7 @@ -179,30 +190,30 @@ pyqtchart=5.12=py39h0fcd23e_7 pyqtwebengine=5.12.1=py39h0fcd23e_7 pysocks=1.7.1=py39hf3d152e_3 python-dateutil=2.8.1=py_0 -python=3.9.2=hffdb5ce_0_cpython +python=3.9.4=hffdb5ce_0_cpython python_abi=3.9=1_cp39 pytz=2021.1=pyhd8ed1ab_0 pyyaml=5.4.1=py39h3811e60_0 pyzmq=22.0.3=py39h37b5a0c_1 qt=5.12.9=hda022c4_4 qwt=6.1.6=h7ec6b3e_0 -readline=8.0=he28a2e2_2 +readline=8.1=h46c0cb4_0 reproc-cpp=14.2.1=h58526e2_0 reproc=14.2.1=h36c2ea0_0 requests=2.25.1=pyhd3deb0d_0 -rtl-sdr=0.6.0=h7f98852_2 +rtl-sdr=0.6.0=h18f079d_2 ruamel_yaml=0.15.80=py39h3811e60_1004 -scipy=1.6.2=py39hee8e79c_0 +scipy=1.6.3=py39hee8e79c_0 sdl=1.2.15=he1b5a44_1 setuptools=49.6.0=py39hf3d152e_3 -six=1.15.0=pyh9f0ad1d_0 -soapysdr-module-lms7=20.10.0=h32598af_0 -soapysdr-module-plutosdr=0.2.1=h7eaeed7_1 -soapysdr-module-remote=0.5.2=h15b8982_1 -soapysdr-module-rtlsdr=0.3.0=hc9558a2_0 -soapysdr-module-uhd=0.4.1=h161985f_1 -soapysdr=0.7.2=py39h1a9c180_4 -sqlite=3.35.4=h74cdb3f_0 +six=1.16.0=pyh6c4a22f_0 +soapysdr-module-lms7=20.10.0=hbab49e3_1 +soapysdr-module-plutosdr=0.2.1=h14e0a3d_2 +soapysdr-module-remote=0.5.2=hee64af1_2 +soapysdr-module-rtlsdr=0.3.0=hee64af1_1 +soapysdr-module-uhd=0.4.1=h75dc44c_2 +soapysdr=0.8.0=py39h1a9c180_0 +sqlite=3.35.5=h74cdb3f_0 tk=8.6.10=hed695b0_1 tornado=6.1=py39h3811e60_1 tqdm=4.60.0=pyhd8ed1ab_0 @@ -210,14 +221,14 @@ traitlets=5.0.5=py_0 tzdata=2021a=he74cb21_0 uhd=3.15.0.0=py39hfa8602a_6 urllib3=1.26.4=pyhd8ed1ab_0 -volk=2.4.1=py39he80948d_1 +volk=2.4.1=h9c3ff4c_3 watchdog=0.10.4=py39hf3d152e_0 wcwidth=0.2.5=pyh9f0ad1d_2 -wxwidgets=3.1.3=h7b38f91_3 +wxwidgets=3.1.3=h4e80389_4 xorg-kbproto=1.0.7=h14c3975_1002 xorg-libice=1.0.10=h516909a_0 xorg-libsm=1.2.3=hd9c2040_1000 -xorg-libx11=1.7.0=h36c2ea0_0 +xorg-libx11=1.7.1=h7f98852_0 xorg-libxau=1.0.9=h14c3975_0 xorg-libxdmcp=1.1.3=h516909a_0 xorg-libxext=1.3.4=h7f98852_1 @@ -229,4 +240,4 @@ xz=5.2.5=h516909a_1 yaml=0.2.5=h516909a_0 zeromq=4.3.4=h9c3ff4c_0 zlib=1.2.11=h516909a_1010 -zstd=1.4.9=ha95c52a_0 +zstd=1.4.9=ha95c52a_0 \ No newline at end of file diff --git a/installer_specs/radioconda-osx-64/construct.yaml b/installer_specs/radioconda-osx-64/construct.yaml index 31e61f3..554d012 100644 --- a/installer_specs/radioconda-osx-64/construct.yaml +++ b/installer_specs/radioconda-osx-64/construct.yaml @@ -9,30 +9,30 @@ name: radioconda post_install: post_install.sh register_python_default: false specs: -- digital_rf=2.6.6=py39h8d93ffa_1 -- gnuradio-osmosdr=0.2.3=py39h5474743_3 -- gnuradio-satellites=3.7.0=py39h5b4e04b_2 -- gnuradio-soapy=2.1.3.1=py39hb5bc8e3_1 -- gnuradio=3.8.3.0=py39h8128f58_2 +- digital_rf=2.6.6=py39h1343810_1 +- gnuradio-osmosdr=0.2.3=py39ha6c9169_5 +- gnuradio-satellites=3.8.0=py39h5b4e04b_0 +- gnuradio-soapy=2.1.3.1=py39h0f022e8_3 +- gnuradio=3.8.3.0=py39h8128f58_4 - gqrx=2.14.4=h7579640_2 -- ipython=7.22.0=py39h71a6800_0 -- libiio=0.21=py39he4a4a3a_4 +- ipython=7.23.1=py39h71a6800_0 +- libiio=0.21=h694c41f_6 - libm2k=0.4.0=py39ha4a404c_2 -- limesuite=20.10.0=h1ad935b_0 -- mamba=0.9.2=py39hb671511_0 -- matplotlib=3.4.1=py39h6e9494a_0 +- limesuite=20.10.0=h1ad935b_1 +- mamba=0.13.0=py39hb671511_0 +- matplotlib=3.4.2=py39h6e9494a_0 - numpy=1.20.2=py39h7eed0ac_0 -- pandas=1.2.3=py39h4d6be9b_0 -- pyadi-iio=0.0.7=pyhd8ed1ab_0 -- python=3.9.2=h2502468_0_cpython +- pandas=1.2.4=py39h4d6be9b_0 +- pyadi-iio=0.0.7=pyhd8ed1ab_1 +- python=3.9.4=h9133fd0_0_cpython - rtl-sdr=0.6.0=h0d85af4_2 -- scipy=1.6.2=py39h056f1c0_0 -- soapysdr-module-lms7=20.10.0=hb03de04_0 -- soapysdr-module-plutosdr=0.2.1=h3fcbbe8_1 -- soapysdr-module-remote=0.5.2=h9903d45_1 -- soapysdr-module-rtlsdr=0.3.0=ha1b3eb9_0 -- soapysdr-module-uhd=0.4.1=hbf6900a_1 -- soapysdr=0.7.2=py39hf018cea_4 +- scipy=1.6.3=py39h056f1c0_0 +- soapysdr-module-lms7=20.10.0=h01fb3c3_1 +- soapysdr-module-plutosdr=0.2.1=h665823e_2 +- soapysdr-module-remote=0.5.2=ha64c28d_2 +- soapysdr-module-rtlsdr=0.3.0=ha64c28d_1 +- soapysdr-module-uhd=0.4.1=h92a74a4_2 +- soapysdr=0.8.0=py39hf018cea_0 - uhd=3.15.0.0=py39he85038b_6 -version: 2021.04.08 +version: 2021.05.19 write_condarc: true diff --git a/installer_specs/radioconda-osx-64/post_install.sh b/installer_specs/radioconda-osx-64/post_install.sh index 7c6998c..67ed389 100644 --- a/installer_specs/radioconda-osx-64/post_install.sh +++ b/installer_specs/radioconda-osx-64/post_install.sh @@ -1 +1,4 @@ -rm -f $PREFIX/pkgs/*.tar.bz2 \ No newline at end of file +#!/bin/sh +PREFIX="${PREFIX:-$2/radioconda}" +rm -f $PREFIX/pkgs/*.tar.bz2 +exit 0 diff --git a/installer_specs/radioconda-osx-64/radioconda-osx-64.txt b/installer_specs/radioconda-osx-64/radioconda-osx-64.txt index 69bd6a0..5e004bb 100644 --- a/installer_specs/radioconda-osx-64/radioconda-osx-64.txt +++ b/installer_specs/radioconda-osx-64/radioconda-osx-64.txt @@ -1,14 +1,14 @@ # platform: osx-64 -# env_hash: 6b503bfc29d8723dac84b1489fd37541d198d1a145709002b1069ec68d218a88 -adwaita-icon-theme=3.38.0=hd0a4bf8_1 +# env_hash: 0c05b827d42179b8b5d679dc2c2817666da9ad533032fb9b7dec009f417cb3dd +adwaita-icon-theme=40.1.1=h694c41f_1 appdirs=1.4.4=pyh9f0ad1d_0 appnope=0.1.2=py39h6e9494a_1 argh=0.26.2=pyh9f0ad1d_1002 atk-1.0=2.36.0=he69c4ee_4 backcall=0.2.0=pyh9f0ad1d_0 -backports.functools_lru_cache=1.6.3=pyhd8ed1ab_0 +backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0 backports=1.0=py_2 -boost-cpp=1.74.0=h43a636a_2 +boost-cpp=1.74.0=hbdcdab7_3 brotlipy=0.7.0=py39hcbf5805_1001 bzip2=1.0.8=hc929b4f_4 c-ares=1.17.1=h0d85af4_1 @@ -20,126 +20,136 @@ certifi=2020.12.5=py39h6e9494a_1 cffi=1.14.5=py39h319c39b_0 chardet=4.0.0=py39h6e9494a_1 click-plugins=1.1.1=py_0 -click=7.1.2=pyh9f0ad1d_0 +click=8.0.0=py39h6e9494a_0 codec2=0.9.2=haf1e3a3_1 -conda-package-handling=1.7.2=py39h66d5b7b_0 -conda=4.10.0=py39h6e9494a_1 +conda-package-handling=1.7.3=py39h89e85a6_0 +conda=4.10.1=py39h6e9494a_0 construct=2.9.45=py_0 cryptography=3.4.7=py39ha2c9959_0 cycler=0.10.0=py_2 dbus=1.13.6=ha13b53f_2 -decorator=5.0.6=pyhd8ed1ab_0 -digital_rf=2.6.6=py39h8d93ffa_1 -epoxy=1.5.5=h35c211d_0 +decorator=5.0.9=pyhd8ed1ab_0 +digital_rf=2.6.6=py39h1343810_1 +epoxy=1.5.7=h0d85af4_0 expat=2.3.0=he49afe7_0 fftw=3.3.9=nompi_hf0880f0_101 -fontconfig=2.13.1=hd23ceaa_1004 +font-ttf-dejavu-sans-mono=2.37=hab24e00_0 +font-ttf-inconsolata=3.000=h77eed37_0 +font-ttf-source-code-pro=2.038=h77eed37_0 +font-ttf-ubuntu=0.83=hab24e00_0 +fontconfig=2.13.1=h10f422b_1005 +fonts-conda-ecosystem=1=0 +fonts-conda-forge=1=0 freetype=2.10.4=h4cff582_1 fribidi=1.0.10=hbcb3906_0 fs=2.4.11=py39hde42818_2 -gdk-pixbuf=2.42.4=h2e6141f_2 +gdk-pixbuf=2.42.6=h2e6141f_0 gettext=0.19.8.1=h7937167_1005 glew=2.1.0=h046ec9c_2 -glib-tools=2.68.0=he49afe7_2 -glib=2.68.0=he49afe7_2 +glib-tools=2.68.2=he49afe7_0 +glib=2.68.2=he49afe7_0 gmp=6.2.1=h2e338ed_0 -gnuradio-core=3.8.3.0=py39hf3bc969_2 -gnuradio-grc=3.8.3.0=py39h03712de_2 -gnuradio-osmosdr=0.2.3=py39h5474743_3 -gnuradio-qtgui=3.8.3.0=py39h1a8f951_2 -gnuradio-satellites=3.7.0=py39h5b4e04b_2 -gnuradio-soapy=2.1.3.1=py39hb5bc8e3_1 -gnuradio-uhd=3.8.3.0=py39h532c3f0_2 -gnuradio-zeromq=3.8.3.0=py39hb670c75_2 -gnuradio=3.8.3.0=py39h8128f58_2 +gnuradio-core=3.8.3.0=py39hf3bc969_4 +gnuradio-grc=3.8.3.0=py39h03712de_4 +gnuradio-osmosdr=0.2.3=py39ha6c9169_5 +gnuradio-qtgui=3.8.3.0=py39h1a8f951_4 +gnuradio-satellites=3.8.0=py39h5b4e04b_0 +gnuradio-soapy=2.1.3.1=py39h0f022e8_3 +gnuradio-uhd=3.8.3.0=py39h532c3f0_4 +gnuradio-zeromq=3.8.3.0=py39hb670c75_4 +gnuradio=3.8.3.0=py39h8128f58_4 gobject-introspection=1.68.0=py39h1652fd0_1 gqrx=2.14.4=h7579640_2 graphite2=1.3.13=h12caacf_1001 gsl=2.6=h71c5fe9_2 -gtk3=3.24.28=h9499984_0 -h5py=3.1.0=nompi_py39hdc2b67d_100 -harfbuzz=2.8.0=h159f659_1 +gstreamer-orc=0.4.32=h0d85af4_1 +gtk3=3.24.28=h9499984_1 +h5py=3.2.1=nompi_py39h1bb8402_100 +harfbuzz=2.8.1=h159f659_0 hdf5=1.10.6=nompi_hc5d9132_1114 hicolor-icon-theme=0.17=h694c41f_2 icu=68.1=h74dc148_0 idna=2.10=pyh9f0ad1d_0 -ipython=7.22.0=py39h71a6800_0 +ipython=7.23.1=py39h71a6800_0 ipython_genutils=0.2.0=py_1 jedi=0.18.0=py39h6e9494a_2 jpeg=9d=hbcb3906_0 kiwisolver=1.3.1=py39hedf5dff_1 -krb5=1.17.2=h60d9502_0 +krb5=1.19.1=hcfbf3a7_0 lcms2=2.12=h577c468_0 -libad9361-iio=0.2=hd953885_1 +libad9361-iio=0.2=hd953885_2 libarchive=3.5.1=h0a5793d_1 -libblas=3.9.0=8_openblas -libcblas=3.9.0=8_openblas -libclang=11.1.0=default_he082bbe_0 -libcurl=7.76.0=h8ef9fac_0 -libcxx=11.1.0=habf9029_0 +libblas=3.9.0=9_openblas +libcblas=3.9.0=9_openblas +libclang=11.1.0=default_he082bbe_1 +libcurl=7.76.1=hf45b732_2 +libcxx=12.0.0=habf9029_0 libedit=3.1.20191231=hed1e85f_2 libev=4.33=haf1e3a3_1 libffi=3.3=h046ec9c_2 -libgfortran5=9.3.0=h6c81a4c_21 -libgfortran=5.0.0=9_3_0_h6c81a4c_21 -libglib=2.68.0=hd556434_2 +libgfortran5=9.3.0=h6c81a4c_22 +libgfortran=5.0.0=9_3_0_h6c81a4c_22 +libglib=2.68.2=hd556434_0 libiconv=1.16=haf1e3a3_0 -libiio=0.21=py39he4a4a3a_4 -liblapack=3.9.0=8_openblas -liblimesuite=20.10.0=he49afe7_0 +libiio-c=0.21=h9e1b77e_6 +libiio=0.21=h694c41f_6 +liblapack=3.9.0=9_openblas +liblimesuite=20.10.0=he49afe7_1 libllvm11=11.1.0=hd011deb_2 libm2k=0.4.0=py39ha4a404c_2 libnghttp2=1.43.0=h07e645a_0 -libopenblas=0.3.12=openmp_h54245bb_1 +libopenblas=0.3.15=openmp_h5e1b9a4_1 libpng=1.6.37=hb0a8c7a_2 -libpq=13.1=h052a64a_2 -librsvg=2.50.3=hd2a7919_2 +libpq=13.3=hea3049e_0 +librsvg=2.50.5=hd2a7919_0 libsodium=1.0.18=hbcb3906_1 libsolv=0.7.18=hcf210ce_0 libssh2=1.9.0=h52ee1ee_6 -libtiff=4.2.0=h355d032_0 -libusb=1.0.24=h1c7c35f_1 +libtiff=4.2.0=h46d1c8c_2 +libusb=1.0.24=h0d85af4_4 libwebp-base=1.2.0=h0d85af4_2 -libxml2=2.9.10=h802ca4f_3 +libxml2=2.9.12=h93ec3fd_0 libxslt=1.1.33=h5739fc3_2 -limesuite=20.10.0=h1ad935b_0 +limesuite=20.10.0=h1ad935b_1 llvm-openmp=11.1.0=hda6cdc1_1 -log4cpp=1.1.3=hb1e8313_1002 +log4cpp=1.1.3=he49afe7_1002 lxml=4.6.3=py39hf41e7f8_0 lz4-c=1.9.3=h046ec9c_0 lzo=2.10=haf1e3a3_1000 mako=1.1.4=pyh44b312d_0 -mamba=0.9.2=py39hb671511_0 -markupsafe=1.1.1=py39hcbf5805_3 -matplotlib-base=3.4.1=py39hb07454d_0 -matplotlib=3.4.1=py39h6e9494a_0 -mysql-common=8.0.23=h694c41f_1 -mysql-libs=8.0.23=hbeb7981_1 +mamba=0.13.0=py39hb671511_0 +markupsafe=2.0.0=py39h89e85a6_0 +matplotlib-base=3.4.2=py39hb07454d_0 +matplotlib-inline=0.1.2=pyhd8ed1ab_2 +matplotlib=3.4.2=py39h6e9494a_0 +mysql-common=8.0.23=h694c41f_2 +mysql-libs=8.0.23=h54f5a68_2 ncurses=6.2=h2e338ed_4 nspr=4.30=hcd9eead_0 -nss=3.47=hcec2283_0 +nss=3.65=h31e2bf1_0 numpy=1.20.2=py39h7eed0ac_0 olefile=0.46=pyh9f0ad1d_1 -openjpeg=2.4.0=h6cbf5cd_0 +openjpeg=2.4.0=h6e7aa92_1 openssl=1.1.1k=h0d85af4_0 packaging=20.9=pyh44b312d_0 -pandas=1.2.3=py39h4d6be9b_0 -pango=1.48.4=ha05cd14_0 +pandas=1.2.4=py39h4d6be9b_0 +pango=1.48.5=ha05cd14_0 parso=0.8.2=pyhd8ed1ab_0 pathtools=0.1.2=py_1 pcre=8.44=hb1e8313_0 pexpect=4.8.0=pyh9f0ad1d_2 pickleshare=0.7.5=py39hde42818_1002 -pillow=8.1.2=py39h5fdd921_1 +pillow=8.2.0=py39h5fdd921_1 pixman=0.40.0=hbcb3906_0 prompt-toolkit=3.0.18=pyha770c72_0 ptyprocess=0.7.0=pyhd3deb0d_0 -pyadi-iio=0.0.7=pyhd8ed1ab_0 -pycairo=1.20.0=py39h6116968_1 +pyadi-iio=0.0.7=pyhd8ed1ab_1 +pycairo=1.20.0=py39hbe14034_1 pycosat=0.6.3=py39hcbf5805_1006 pycparser=2.20=pyh9f0ad1d_2 -pygments=2.8.1=pyhd8ed1ab_0 -pygobject=3.40.1=py39h8819ad7_0 +pygments=2.9.0=pyhd8ed1ab_0 +pygobject=3.40.1=py39h8819ad7_1 +pylibiio=0.21=py_6 pyopenssl=20.0.1=pyhd8ed1ab_0 pyparsing=2.4.7=pyh9f0ad1d_0 pyqt-impl=5.12.3=py39hef7122c_7 @@ -149,7 +159,7 @@ pyqtchart=5.12=py39hef7122c_7 pyqtwebengine=5.12.1=py39hef7122c_7 pysocks=1.7.1=py39h6e9494a_3 python-dateutil=2.8.1=py_0 -python=3.9.2=h2502468_0_cpython +python=3.9.4=h9133fd0_0_cpython python_abi=3.9=1_cp39 pytz=2021.1=pyhd8ed1ab_0 pyyaml=5.4.1=py39hcbf5805_0 @@ -162,16 +172,16 @@ reproc=14.2.1=hbcb3906_0 requests=2.25.1=pyhd3deb0d_0 rtl-sdr=0.6.0=h0d85af4_2 ruamel_yaml=0.15.80=py39h4b0b724_1004 -scipy=1.6.2=py39h056f1c0_0 +scipy=1.6.3=py39h056f1c0_0 setuptools=49.6.0=py39h6e9494a_3 -six=1.15.0=pyh9f0ad1d_0 -soapysdr-module-lms7=20.10.0=hb03de04_0 -soapysdr-module-plutosdr=0.2.1=h3fcbbe8_1 -soapysdr-module-remote=0.5.2=h9903d45_1 -soapysdr-module-rtlsdr=0.3.0=ha1b3eb9_0 -soapysdr-module-uhd=0.4.1=hbf6900a_1 -soapysdr=0.7.2=py39hf018cea_4 -sqlite=3.35.4=h44b9ce1_0 +six=1.16.0=pyh6c4a22f_0 +soapysdr-module-lms7=20.10.0=h01fb3c3_1 +soapysdr-module-plutosdr=0.2.1=h665823e_2 +soapysdr-module-remote=0.5.2=ha64c28d_2 +soapysdr-module-rtlsdr=0.3.0=ha64c28d_1 +soapysdr-module-uhd=0.4.1=h92a74a4_2 +soapysdr=0.8.0=py39hf018cea_0 +sqlite=3.35.5=h44b9ce1_0 tk=8.6.10=hb0a8c7a_1 tornado=6.1=py39hcbf5805_1 tqdm=4.60.0=pyhd8ed1ab_0 @@ -179,11 +189,11 @@ traitlets=5.0.5=py_0 tzdata=2021a=he74cb21_0 uhd=3.15.0.0=py39he85038b_6 urllib3=1.26.4=pyhd8ed1ab_0 -volk=2.4.1=py39h83b5cea_1 +volk=2.4.1=h03a7de8_3 watchdog=0.10.4=py39h4059872_0 wcwidth=0.2.5=pyh9f0ad1d_2 xz=5.2.5=haf1e3a3_1 yaml=0.2.5=haf1e3a3_0 zeromq=4.3.4=h1c7c35f_0 zlib=1.2.11=h7795811_1010 -zstd=1.4.9=h582d3a0_0 +zstd=1.4.9=h582d3a0_0 \ No newline at end of file diff --git a/installer_specs/radioconda-win-64/construct.yaml b/installer_specs/radioconda-win-64/construct.yaml index 4cf03e6..5ecd6de 100644 --- a/installer_specs/radioconda-win-64/construct.yaml +++ b/installer_specs/radioconda-win-64/construct.yaml @@ -11,30 +11,30 @@ post_install: post_install.bat register_python_default: false specs: - digital_rf=2.6.6=py38haa20497_1 -- gnuradio-osmosdr=0.2.3=py38h64b1f91_3 -- gnuradio-satellites=3.7.0=py38h03984f1_2 -- gnuradio-soapy=2.1.3.1=py38he8840da_1 -- gnuradio=3.8.3.0=py38h70ef170_2 +- gnuradio-osmosdr=0.2.3=py38h310a41d_5 +- gnuradio-satellites=3.8.0=py38h03984f1_0 +- gnuradio-soapy=2.1.3.1=py38h1515620_3 +- gnuradio=3.8.3.0=py38h70ef170_4 - gqrx=2.14.4=h090ae7c_2 -- ipython=7.22.0=py38h43734a8_0 -- libiio=0.21=py38h292cb97_4 +- ipython=7.23.1=py38h43734a8_0 +- libiio=0.21=h57928b3_6 - libm2k=0.4.0=py38haf3f0dc_2 -- limesuite=20.10.0=hbaad480_0 -- mamba=0.9.2=py38hdd88130_0 -- matplotlib=3.4.1=py38haa244fe_0 +- limesuite=20.10.0=hbaad480_1 +- mamba=0.13.0=py38hdd88130_0 +- matplotlib=3.4.2=py38haa244fe_0 - numpy=1.20.2=py38h09042cb_0 -- pandas=1.2.3=py38h4c96930_0 -- pyadi-iio=0.0.7=pyhd8ed1ab_0 -- python=3.8.0=hc9e8b01_5 +- pandas=1.2.4=py38h60cbd38_0 +- pyadi-iio=0.0.7=pyhd8ed1ab_1 +- python=3.8.10=h7840368_1_cpython - radioconda_console_shortcut=1.0=0 - rtl-sdr=0.6.0=h8ffe710_2 -- scipy=1.6.2=py38he847743_0 -- soapysdr-module-lms7=20.10.0=h54dde43_0 -- soapysdr-module-plutosdr=0.2.1=h94b6719_1 -- soapysdr-module-remote=0.5.2=hcf9c798_1 -- soapysdr-module-rtlsdr=0.3.0=h74a9793_0 -- soapysdr-module-uhd=0.4.1=hc03c0ee_1 -- soapysdr=0.7.2=py38hbd9d945_4 +- scipy=1.6.3=py38he847743_0 +- soapysdr-module-lms7=20.10.0=heea76a6_1 +- soapysdr-module-plutosdr=0.2.1=he7677eb_2 +- soapysdr-module-remote=0.5.2=h23704b7_2 +- soapysdr-module-rtlsdr=0.3.0=h23704b7_1 +- soapysdr-module-uhd=0.4.1=h4a99580_2 +- soapysdr=0.8.0=py38hbd9d945_0 - uhd=3.15.0.0=py38h1d4ea3b_6 -version: 2021.04.08 +version: 2021.05.19 write_condarc: true diff --git a/installer_specs/radioconda-win-64/post_install.bat b/installer_specs/radioconda-win-64/post_install.bat index 0899c20..f20846b 100644 --- a/installer_specs/radioconda-win-64/post_install.bat +++ b/installer_specs/radioconda-win-64/post_install.bat @@ -1 +1,2 @@ -del /q %PREFIX%\pkgs\*.tar.bz2 \ No newline at end of file +del /q %PREFIX%\pkgs\*.tar.bz2 +exit 0 diff --git a/installer_specs/radioconda-win-64/radioconda-win-64.txt b/installer_specs/radioconda-win-64/radioconda-win-64.txt index f055ea7..a485efe 100644 --- a/installer_specs/radioconda-win-64/radioconda-win-64.txt +++ b/installer_specs/radioconda-win-64/radioconda-win-64.txt @@ -1,13 +1,13 @@ # platform: win-64 -# env_hash: 53a3f4ec327438d4166951c1d110946ec293a06a622c9420c8511bc5e4a73662 -adwaita-icon-theme=3.38.0=heaa5689_1 +# env_hash: f06c0253b45c854fe8e10d5de0f5313923a2765c15b790765cf4200b911c9c06 +adwaita-icon-theme=40.1.1=h57928b3_1 appdirs=1.4.4=pyh9f0ad1d_0 argh=0.26.2=py38_1001 atk-1.0=2.36.0=h7222f49_4 backcall=0.2.0=pyh9f0ad1d_0 -backports.functools_lru_cache=1.6.3=pyhd8ed1ab_0 +backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0 backports=1.0=py_2 -boost-cpp=1.74.0=h54f0996_2 +boost-cpp=1.74.0=h5b4e17d_4 brotlipy=0.7.0=py38hab1e662_1001 bzip2=1.0.8=h8ffe710_4 ca-certificates=2020.12.5=h5b45459_0 @@ -18,80 +18,86 @@ certifi=2020.12.5=py38haa244fe_1 cffi=1.14.5=py38hd8c33c5_0 chardet=4.0.0=py38haa244fe_1 click-plugins=1.1.1=py_0 -click=7.1.2=pyh9f0ad1d_0 -codec2=0.9.2=h301d43c_1 +click=8.0.0=py38haa244fe_0 +codec2=0.9.2=hcd874cb_1 colorama=0.4.4=pyh9f0ad1d_0 -conda-package-handling=1.7.2=py38h8934438_0 -conda=4.10.0=py38haa244fe_1 +conda-package-handling=1.7.3=py38h31c79cd_0 +conda=4.10.1=py38haa244fe_0 construct=2.9.45=py_0 cryptography=3.4.7=py38hd7da0ea_0 cycler=0.10.0=py_2 -decorator=5.0.6=pyhd8ed1ab_0 +decorator=5.0.9=pyhd8ed1ab_0 digital_rf=2.6.6=py38haa20497_1 -epoxy=1.5.5=h8d14728_0 +epoxy=1.5.7=h8d14728_0 expat=2.3.0=h39d44d4_0 fftw=3.3.9=nompi_hd3ad3c4_101 -fontconfig=2.13.1=h1989441_1004 +font-ttf-dejavu-sans-mono=2.37=hab24e00_0 +font-ttf-inconsolata=3.000=h77eed37_0 +font-ttf-source-code-pro=2.038=h77eed37_0 +font-ttf-ubuntu=0.83=hab24e00_0 +fontconfig=2.13.1=h1989441_1005 +fonts-conda-ecosystem=1=0 +fonts-conda-forge=1=0 freetype=2.10.4=h546665d_1 fribidi=1.0.10=h62dcd97_0 fs=2.4.11=py38h32f6830_2 -gdk-pixbuf=2.42.4=h1c5aac7_2 +gdk-pixbuf=2.42.6=h1c5aac7_0 gettext=0.19.8.1=h1a89ca6_1005 glew=2.1.0=h39d44d4_2 -glib-tools=2.68.0=h0e60522_2 -glib=2.68.0=h0e60522_2 -gnuradio-core=3.8.3.0=py38h76584d8_2 -gnuradio-grc=3.8.3.0=py38h33e2607_2 -gnuradio-osmosdr=0.2.3=py38h64b1f91_3 -gnuradio-qtgui=3.8.3.0=py38h133500e_2 -gnuradio-satellites=3.7.0=py38h03984f1_2 -gnuradio-soapy=2.1.3.1=py38he8840da_1 -gnuradio-uhd=3.8.3.0=py38h25a27fd_2 -gnuradio-video-sdl=3.8.3.0=py38h33e2607_2 -gnuradio-zeromq=3.8.3.0=py38h2f484db_2 -gnuradio=3.8.3.0=py38h70ef170_2 +glib-tools=2.68.2=h0e60522_0 +gnuradio-core=3.8.3.0=py38h76584d8_4 +gnuradio-grc=3.8.3.0=py38h33e2607_4 +gnuradio-osmosdr=0.2.3=py38h310a41d_5 +gnuradio-qtgui=3.8.3.0=py38h133500e_4 +gnuradio-satellites=3.8.0=py38h03984f1_0 +gnuradio-soapy=2.1.3.1=py38h1515620_3 +gnuradio-uhd=3.8.3.0=py38h25a27fd_4 +gnuradio-video-sdl=3.8.3.0=py38h33e2607_4 +gnuradio-zeromq=3.8.3.0=py38h2f484db_4 +gnuradio=3.8.3.0=py38h70ef170_4 gobject-introspection=1.68.0=py38hcb2c0c0_1 gqrx=2.14.4=h090ae7c_2 graphite2=1.3.13=1000 gsl=2.6=hdfb1a43_2 -gtk3=3.24.28=h9a703b0_0 -h5py=3.1.0=nompi_py38h022eade_100 -harfbuzz=2.8.0=hc601d6f_1 +gtk3=3.24.28=h9a703b0_1 +h5py=3.2.1=nompi_py38he6c2248_100 +harfbuzz=2.8.1=hc601d6f_0 hdf5=1.10.6=nompi_h5268f04_1114 hicolor-icon-theme=0.17=h57928b3_2 icu=68.1=h0e60522_0 idna=2.10=pyh9f0ad1d_0 intel-openmp=2021.2.0=h57928b3_616 -ipython=7.22.0=py38h43734a8_0 +ipython=7.23.1=py38h43734a8_0 ipython_genutils=0.2.0=py_1 jedi=0.18.0=py38haa244fe_2 jpeg=9d=he774522_0 kiwisolver=1.3.1=py38hbd9d945_1 -krb5=1.17.2=hbae68bd_0 +krb5=1.19.1=hbae68bd_0 lcms2=2.12=h2a16943_0 -libad9361-iio=0.2=h3326528_1 -libarchive=3.5.1=hf621db8_1 -libblas=3.9.0=8_mkl -libcblas=3.9.0=8_mkl -libclang=11.1.0=default_h5c34c98_0 -libcurl=7.76.0=hf1763fc_0 +libad9361-iio=0.2=h3326528_2 +libarchive=3.5.1=hb45042f_2 +libblas=3.9.0=9_mkl +libcblas=3.9.0=9_mkl +libclang=11.1.0=default_h5c34c98_1 +libcurl=7.76.1=h789b8ee_2 libffi=3.3=h0e60522_2 -libglib=2.68.0=h1e62bf3_2 +libglib=2.68.2=h1e62bf3_0 libiconv=1.16=he774522_0 -libiio=0.21=py38h292cb97_4 -liblapack=3.9.0=8_mkl -liblimesuite=20.10.0=h0e60522_0 +libiio-c=0.21=h65864e5_6 +libiio=0.21=h57928b3_6 +liblapack=3.9.0=9_mkl +liblimesuite=20.10.0=h0e60522_1 libm2k=0.4.0=py38haf3f0dc_2 libpng=1.6.37=ha81a0f5_2 -librsvg=2.50.3=h09c2f97_2 +librsvg=2.50.5=h09c2f97_0 libsodium=1.0.18=h62dcd97_1 libsolv=0.7.18=h7755175_0 libssh2=1.9.0=h680486a_6 -libtiff=4.2.0=hc10be44_0 -libusb=1.0.24=h0e60522_1 -libxml2=2.9.10=hf5bbc77_3 +libtiff=4.3.0=h0c97f57_0 +libusb=1.0.24=h0e60522_2 +libxml2=2.9.12=hf5bbc77_0 libxslt=1.1.33=h65864e5_2 -limesuite=20.10.0=hbaad480_0 +limesuite=20.10.0=hbaad480_1 log4cpp=1.1.3=ha925a31_1002 lxml=4.6.3=py38h292cb97_0 lz4-c=1.9.3=h8ffe710_0 @@ -102,35 +108,37 @@ m2w64-gcc-libs=5.3.0=7 m2w64-gmp=6.1.0=2 m2w64-libwinpthread-git=5.0.0.4634.697f757=2 mako=1.1.4=pyh44b312d_0 -mamba=0.9.2=py38hdd88130_0 -markupsafe=1.1.1=py38h294d835_3 -matplotlib-base=3.4.1=py38heae8d8c_0 -matplotlib=3.4.1=py38haa244fe_0 +mamba=0.13.0=py38hdd88130_0 +markupsafe=2.0.0=py38h294d835_0 +matplotlib-base=3.4.2=py38heae8d8c_0 +matplotlib-inline=0.1.2=pyhd8ed1ab_2 +matplotlib=3.4.2=py38haa244fe_0 menuinst=1.4.16=py38h32f6830_1 -mkl=2020.4=hb70f87d_311 +mkl=2021.2.0=hb70f87d_389 mpir=3.0.0=he025d50_1002 msys2-conda-epoch=20160418=1 numpy=1.20.2=py38h09042cb_0 olefile=0.46=pyh9f0ad1d_1 -openjpeg=2.4.0=h48faf41_0 +openjpeg=2.4.0=hb211442_1 openssl=1.1.1k=h8ffe710_0 packaging=20.9=pyh44b312d_0 -pandas=1.2.3=py38h4c96930_0 -pango=1.48.4=hd84fcdd_0 +pandas=1.2.4=py38h60cbd38_0 +pango=1.48.5=hd84fcdd_0 parso=0.8.2=pyhd8ed1ab_0 pathtools=0.1.2=py_1 pcre=8.44=ha925a31_0 pickleshare=0.7.5=py38h32f6830_1002 -pillow=8.1.2=py38h9273828_1 +pillow=8.2.0=py38h9273828_1 pixman=0.40.0=h8ffe710_0 prompt-toolkit=3.0.18=pyha770c72_0 pthreads-win32=2.9.1=hfa6e2cd_3 -pyadi-iio=0.0.7=pyhd8ed1ab_0 -pycairo=1.20.0=py38h7e31434_1 +pyadi-iio=0.0.7=pyhd8ed1ab_1 +pycairo=1.20.0=py38h979ce04_1 pycosat=0.6.3=py38h294d835_1006 pycparser=2.20=pyh9f0ad1d_2 -pygments=2.8.1=pyhd8ed1ab_0 -pygobject=3.40.1=py38hacb06c2_0 +pygments=2.9.0=pyhd8ed1ab_0 +pygobject=3.40.1=py38hacb06c2_1 +pylibiio=0.21=py_6 pyopenssl=20.0.1=pyhd8ed1ab_0 pyparsing=2.4.7=pyh9f0ad1d_0 pyqt-impl=5.12.3=py38h885f38d_7 @@ -141,7 +149,7 @@ pyqtwebengine=5.12.1=py38h885f38d_7 pyreadline=2.1=py38haa244fe_1003 pysocks=1.7.1=py38haa244fe_3 python-dateutil=2.8.1=py_0 -python=3.8.0=hc9e8b01_5 +python=3.8.10=h7840368_1_cpython python_abi=3.8=1_cp38 pytz=2021.1=pyhd8ed1ab_0 pywin32=300=py38h294d835_0 @@ -155,17 +163,18 @@ reproc=14.2.1=h8ffe710_0 requests=2.25.1=pyhd3deb0d_0 rtl-sdr=0.6.0=h8ffe710_2 ruamel_yaml=0.15.80=py38h294d835_1004 -scipy=1.6.2=py38he847743_0 +scipy=1.6.3=py38he847743_0 sdl=1.2.15=h21ff451_1 setuptools=49.6.0=py38haa244fe_3 -six=1.15.0=pyh9f0ad1d_0 -soapysdr-module-lms7=20.10.0=h54dde43_0 -soapysdr-module-plutosdr=0.2.1=h94b6719_1 -soapysdr-module-remote=0.5.2=hcf9c798_1 -soapysdr-module-rtlsdr=0.3.0=h74a9793_0 -soapysdr-module-uhd=0.4.1=hc03c0ee_1 -soapysdr=0.7.2=py38hbd9d945_4 -sqlite=3.35.4=h8ffe710_0 +six=1.16.0=pyh6c4a22f_0 +soapysdr-module-lms7=20.10.0=heea76a6_1 +soapysdr-module-plutosdr=0.2.1=he7677eb_2 +soapysdr-module-remote=0.5.2=h23704b7_2 +soapysdr-module-rtlsdr=0.3.0=h23704b7_1 +soapysdr-module-uhd=0.4.1=h4a99580_2 +soapysdr=0.8.0=py38hbd9d945_0 +sqlite=3.35.5=h8ffe710_0 +tbb=2021.2.0=h2d74725_0 tk=8.6.10=he774522_1 tornado=6.1=py38h294d835_1 tqdm=4.60.0=pyhd8ed1ab_0 @@ -173,15 +182,15 @@ traitlets=5.0.5=py_0 uhd=3.15.0.0=py38h1d4ea3b_6 urllib3=1.26.4=pyhd8ed1ab_0 vc=14.2=hb210afc_4 -volk=2.4.1=py38h885f38d_1 +volk=2.4.1=h0e60522_3 vs2015_runtime=14.28.29325=h5e1d092_4 watchdog=0.10.4=py38haa244fe_0 wcwidth=0.2.5=pyh9f0ad1d_2 win_inet_pton=1.1.0=py38haa244fe_2 wincertstore=0.2=py38haa244fe_1006 -wxwidgets=3.1.3=hd0f2d7a_3 +wxwidgets=3.1.3=h8e1ed31_4 xz=5.2.5=h62dcd97_1 yaml=0.2.5=he774522_0 zeromq=4.3.4=h0e60522_0 zlib=1.2.11=h62dcd97_1010 -zstd=1.4.9=h6255e5f_0 +zstd=1.5.0=h6255e5f_0 \ No newline at end of file From ff890a07f524d74635e000b86887aa67ea498f38 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 17:21:59 -0400 Subject: [PATCH 07/17] See if ~ is the problem in osx pkg install path. --- .github/workflows/build_radioconda.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index cce2766..bb63052 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -86,13 +86,12 @@ jobs: - name: Test installer (pkg) if: contains(matrix.OS_NAME, 'MacOSX') - continue-on-error: true # this test doesn't work yet shell: bash env: OS_NAME: ${{ matrix.OS_NAME }} ARCH: ${{ matrix.ARCH }} TARGET_VOLUME: CurrentUserHomeDirectory - INSTALL_PATH: ~/${{ env.DISTNAME }} + INSTALL_PATH: /Users/runner/${{ env.DISTNAME }} run: | installer -verbose -dumplog -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" From e57dfd0cb7e53caf26c2482a0be573deb5e56dae Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 17:28:50 -0400 Subject: [PATCH 08/17] Try adding workflow_dispatch trigger. --- .github/workflows/build_radioconda.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index bb63052..b0c1ece 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -6,6 +6,7 @@ on: pull_request: paths: - "installer_specs/**" + workflow_dispatch: env: DISTNAME: radioconda From d971d6142b101096b81030dd10bf1e3e95ee3f70 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 17:50:44 -0400 Subject: [PATCH 09/17] Try $HOME in macOS pkg INSTALL_PATH. --- .github/workflows/build_radioconda.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index b0c1ece..efa3375 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -92,7 +92,7 @@ jobs: OS_NAME: ${{ matrix.OS_NAME }} ARCH: ${{ matrix.ARCH }} TARGET_VOLUME: CurrentUserHomeDirectory - INSTALL_PATH: /Users/runner/${{ env.DISTNAME }} + INSTALL_PATH: $HOME/${{ env.DISTNAME }} run: | installer -verbose -dumplog -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" From a84292c60dc979be6a01ddbc17327bd138524184 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 18:33:26 -0400 Subject: [PATCH 10/17] Try a relative path from github.workspace. --- .github/workflows/build_radioconda.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index efa3375..4a9fa7e 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -92,7 +92,7 @@ jobs: OS_NAME: ${{ matrix.OS_NAME }} ARCH: ${{ matrix.ARCH }} TARGET_VOLUME: CurrentUserHomeDirectory - INSTALL_PATH: $HOME/${{ env.DISTNAME }} + INSTALL_PATH: ${{ github.workspace }}/../${{ env.DISTNAME }} run: | installer -verbose -dumplog -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" From 25a305688132cbef3d7741288debb9bc8f568dbf Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Wed, 19 May 2021 19:03:45 -0400 Subject: [PATCH 11/17] Fix the relative path. --- .github/workflows/build_radioconda.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index 4a9fa7e..91479ef 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -92,7 +92,7 @@ jobs: OS_NAME: ${{ matrix.OS_NAME }} ARCH: ${{ matrix.ARCH }} TARGET_VOLUME: CurrentUserHomeDirectory - INSTALL_PATH: ${{ github.workspace }}/../${{ env.DISTNAME }} + INSTALL_PATH: ${{ github.workspace }}/../../../${{ env.DISTNAME }} run: | installer -verbose -dumplog -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" From 5553635a298f7b8b57de44c5edee3679c0e3effd Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Thu, 20 May 2021 17:06:10 -0400 Subject: [PATCH 12/17] Separate env packages and installer-only (base) packages. This makes the rendered lock files more useful for users (they won't install conda/mamba in a non-base environment) and will allow for the creation of a metapackage for each release. --- .github/workflows/build_radioconda.yml | 2 +- radioconda.yaml | 12 +- rerender.py | 244 ++++++++++++++++--------- 3 files changed, 164 insertions(+), 94 deletions(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index 91479ef..bd3de5b 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -69,7 +69,7 @@ jobs: env: PLATFORM: ${{ matrix.PLATFORM }} run: | - cp installer_specs/$DISTNAME-$PLATFORM/$DISTNAME-$PLATFORM.txt dist/ + cp installer_specs/$DISTNAME-$PLATFORM.txt dist/ ls -lh dist - name: Test installer (sh) diff --git a/radioconda.yaml b/radioconda.yaml index 41de7b7..d8aa714 100644 --- a/radioconda.yaml +++ b/radioconda.yaml @@ -7,19 +7,13 @@ platforms: - osx-64 - win-64 dependencies: - - mamba - - ipython - - python - # restrict to python 3.8 on Windows for Windows 7 compatibility - - python 3.8.* # [win] - - radioconda_console_shortcut # [win] - - digital_rf - gnuradio 3.8.* - gnuradio-osmosdr - gnuradio-satellites - gnuradio-soapy - gqrx + - ipython - libiio - libm2k - limesuite @@ -27,6 +21,10 @@ dependencies: - numpy - pandas - pyadi-iio + - python + # restrict to python 3.8 on Windows for Windows 7 compatibility + - python 3.8.* # [win] + - radioconda_console_shortcut # [win] - rtl-sdr - scipy - soapysdr diff --git a/rerender.py b/rerender.py index 00d6d38..6b605a4 100755 --- a/rerender.py +++ b/rerender.py @@ -1,12 +1,17 @@ #!/usr/bin/env python3 import pathlib import shutil +from typing import List, Optional import conda_lock import yaml -def render_lock_spec( +def name_from_pkg_spec(spec: str): + return spec.split(sep=None, maxsplit=1)[0].split(sep="=", maxsplit=1)[0] + + +def lock_env_spec( lock_spec: conda_lock.src_parser.LockSpecification, conda_exe: str ) -> conda_lock.src_parser.LockSpecification: create_env_dict = conda_lock.conda_lock.solve_specs_for_arch( @@ -16,36 +21,104 @@ def render_lock_spec( platform=lock_spec.platform, ) pkgs = create_env_dict["actions"]["LINK"] - spec_names = set( - spec.split(sep=None, maxsplit=1)[0].split(sep="=", maxsplit=1)[0] - for spec in lock_spec.specs - ) + locked_specs = ["{name}={version}={build_string}".format(**pkg) for pkg in pkgs] - rendered_specs = [] - rendered_dep_specs = [] - for pkg in pkgs: - pkg_spec = "{name}={version}={build_string}".format(**pkg) - if pkg["name"] in spec_names: - rendered_specs.append(pkg_spec) - else: - rendered_dep_specs.append(pkg_spec) - - rendered_lock_spec = conda_lock.src_parser.LockSpecification( - specs=sorted(rendered_specs), - channels=lock_spec.channels, - platform=lock_spec.platform, - ) - rendered_full_lock_spec = conda_lock.src_parser.LockSpecification( - specs=sorted(rendered_specs + rendered_dep_specs), + locked_env_spec = conda_lock.src_parser.LockSpecification( + specs=sorted(locked_specs), channels=lock_spec.channels, platform=lock_spec.platform, ) - return rendered_lock_spec, rendered_full_lock_spec + return locked_env_spec -def render_constructor_specs( +def write_lock_file( + lock_spec: conda_lock.src_parser.LockSpecification, + lock_file_path: pathlib.Path, + name: Optional[str] = None, + version: Optional[str] = None, + channels: Optional[List[str]] = None, +): + lockfile_contents = [ + f"# platform: {lock_spec.platform}", + f"# env_hash: {lock_spec.env_hash()}", + ] + if name: + lockfile_contents.append(f"# name: {name}") + if version: + lockfile_contents.append(f"# version: {version}") + if channels: + lockfile_contents.append(f"# channels: {','.join(channels)}") + lockfile_contents.extend(lock_spec.specs) + with lock_file_path.open("w") as f: + f.write("\n".join(lockfile_contents)) + + +def render_constructor( + lock_spec: conda_lock.src_parser.LockSpecification, + name: str, + version: str, + company: str, + license_file: pathlib.Path, + output_dir: pathlib.Path, +) -> dict: + platform = lock_spec.platform + constructor_name = f"{name}-{platform}" + + construct_dict = dict( + name=name, + version=version, + company=company, + channels=lock_spec.channels, + specs=lock_spec.specs, + initialize_by_default=True, + installer_type="all", + keep_pkgs=True, + license_file="LICENSE", + register_python_default=False, + write_condarc=True, + ) + if platform.startswith("win"): + construct_dict["post_install"] = "post_install.bat" + else: + construct_dict["post_install"] = "post_install.sh" + + constructor_dir = output_dir / constructor_name + if constructor_dir.exists(): + shutil.rmtree(constructor_dir) + constructor_dir.mkdir(parents=True) + + # copy license to the constructor directory + shutil.copy(license_file, constructor_dir / "LICENSE") + + # write the post_install scripts referenced in the construct dict + if platform.startswith("win"): + with (constructor_dir / "post_install.bat").open("w") as f: + f.write("\n".join((r"del /q %PREFIX%\pkgs\*.tar.bz2", "exit 0", ""))) + else: + with (constructor_dir / "post_install.sh").open("w") as f: + f.write( + "\n".join( + ( + "#!/bin/sh", + f'PREFIX="${{PREFIX:-$2/{name}}}"', + r"rm -f $PREFIX/pkgs/*.tar.bz2", + "exit 0", + "", + ) + ) + ) + + construct_yaml_path = constructor_dir / "construct.yaml" + with construct_yaml_path.open("w") as f: + yaml.safe_dump(construct_dict, stream=f) + + return construct_dict + + +def render_platforms( environment_file: pathlib.Path, + installer_pkg_specs: List[str], version: str, company: str, license_file: pathlib.Path, @@ -55,85 +128,83 @@ def render_constructor_specs( with environment_file.open("r") as f: env_yaml_data = yaml.safe_load(f) - installer_name = env_yaml_data["name"] + env_name = env_yaml_data["name"] platforms = env_yaml_data["platforms"] if not license_file.exists(): raise ValueError(f"Cannot find license file: {license_file}") - output_dir.mkdir(parents=True, exist_ok=True) + if output_dir.exists(): + shutil.rmtree(output_dir) + output_dir.mkdir(parents=True) - constructor_specs = {} + rendered_platforms = {} for platform in platforms: - constructor_name = f"{installer_name}-{platform}" + output_name = f"{env_name}-{platform}" - lock_spec = conda_lock.conda_lock.parse_environment_file( + # get the environment specification for the list of packages from the env file + env_spec = conda_lock.conda_lock.parse_environment_file( environment_file=environment_file, platform=platform ) - rendered_lock_spec, rendered_full_lock_spec = render_lock_spec( - lock_spec, conda_exe + + # lock the full environment specification to specific versions and builds + locked_env_spec = lock_env_spec(env_spec, conda_exe) + + # write the full environment specification to a lock file + lock_file_path = output_dir / f"{output_name}.txt" + write_lock_file( + locked_env_spec, + lock_file_path, + name=env_name, + version=version, + channels=locked_env_spec.channels, ) - construct_dict = dict( - name=installer_name, + + # add installer-only (base environment) packages and lock those too + installer_spec = conda_lock.src_parser.LockSpecification( + specs=sorted(locked_env_spec.specs + installer_pkg_specs), + channels=locked_env_spec.channels, + platform=locked_env_spec.platform, + ) + locked_installer_spec = lock_env_spec(installer_spec, conda_exe) + + # get a set of only the packages to put in the constructor specification + # taken from the installer-only list and those explicitly selected originally + constructor_pkg_names = set( + name_from_pkg_spec(spec) for spec in env_spec.specs + installer_pkg_specs + ) + + # filter the installer spec by the constructor package names + constructor_pkg_specs = [ + spec + for spec in locked_installer_spec.specs + if name_from_pkg_spec(spec) in constructor_pkg_names + ] + constructor_spec = conda_lock.src_parser.LockSpecification( + specs=constructor_pkg_specs, + channels=locked_installer_spec.channels, + platform=locked_installer_spec.platform, + ) + + # create the rendered constructor directory + constructor_dict = render_constructor( + lock_spec=constructor_spec, + name=env_name, version=version, company=company, - channels=rendered_lock_spec.channels, - specs=rendered_lock_spec.specs, - initialize_by_default=True, - installer_type="all", - keep_pkgs=True, - license_file="LICENSE", - register_python_default=False, - write_condarc=True, + license_file=license_file, + output_dir=output_dir, ) - if platform.startswith("win"): - construct_dict["post_install"] = "post_install.bat" - else: - construct_dict["post_install"] = "post_install.sh" - constructor_specs[constructor_name] = construct_dict + # aggregate output + rendered_platforms[output_name] = dict( + locked_env_spec=locked_env_spec, + locked_installer_spec=locked_installer_spec, + constructor_dict=constructor_dict, + ) - constructor_dir = output_dir / constructor_name - if constructor_dir.exists(): - shutil.rmtree(constructor_dir) - constructor_dir.mkdir(parents=True) - - # copy license to the constructor directory - shutil.copy(license_file, constructor_dir / "LICENSE") - - # write the post_install scripts referenced in the construct dict - if platform.startswith("win"): - with (constructor_dir / "post_install.bat").open("w") as f: - f.write("\n".join((r"del /q %PREFIX%\pkgs\*.tar.bz2", "exit 0", ""))) - else: - with (constructor_dir / "post_install.sh").open("w") as f: - f.write( - "\n".join( - ( - "#!/bin/sh", - f'PREFIX="${{PREFIX:-$2/{installer_name}}}"', - r"rm -f $PREFIX/pkgs/*.tar.bz2", - "exit 0", - "", - ) - ) - ) - - construct_yaml_path = constructor_dir / "construct.yaml" - with construct_yaml_path.open("w") as f: - yaml.safe_dump(construct_dict, stream=f) - - lockfile_contents = [ - f"# platform: {rendered_full_lock_spec.platform}", - f"# env_hash: {rendered_full_lock_spec.env_hash()}", - ] - lockfile_contents.extend(rendered_full_lock_spec.specs) - lock_file_path = constructor_dir / f"{constructor_name}.txt" - with lock_file_path.open("w") as f: - f.write("\n".join(lockfile_contents)) - - return constructor_specs + return rendered_platforms if __name__ == "__main__": @@ -221,8 +292,9 @@ if __name__ == "__main__": conda_executable=args.conda_exe, mamba=True, micromamba=True ) - constructor_specs = render_constructor_specs( + constructor_specs = render_platforms( environment_file=args.environment_file, + installer_pkg_specs=["mamba"], version=args.version, company=args.company, license_file=args.license_file, From 5b3d2aafade511b6ce4df0ef12c4e800e297a854 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Thu, 20 May 2021 17:15:17 -0400 Subject: [PATCH 13/17] Re-render 2021.05.20 --- .../radioconda-linux-64.txt | 34 +++++++++---------- .../radioconda-linux-64/construct.yaml | 6 ++-- .../radioconda-osx-64.txt | 24 +++++-------- .../radioconda-osx-64/construct.yaml | 6 ++-- .../radioconda-win-64.txt | 29 +++++++--------- .../radioconda-win-64/construct.yaml | 6 ++-- 6 files changed, 45 insertions(+), 60 deletions(-) rename installer_specs/{radioconda-linux-64 => }/radioconda-linux-64.txt (91%) rename installer_specs/{radioconda-osx-64 => }/radioconda-osx-64.txt (90%) rename installer_specs/{radioconda-win-64 => }/radioconda-win-64.txt (90%) diff --git a/installer_specs/radioconda-linux-64/radioconda-linux-64.txt b/installer_specs/radioconda-linux-64.txt similarity index 91% rename from installer_specs/radioconda-linux-64/radioconda-linux-64.txt rename to installer_specs/radioconda-linux-64.txt index 16c1792..1d9ee7b 100644 --- a/installer_specs/radioconda-linux-64/radioconda-linux-64.txt +++ b/installer_specs/radioconda-linux-64.txt @@ -1,13 +1,16 @@ # platform: linux-64 -# env_hash: 98859dc570002b2c1fb97f42fcb395f68c7f32ea966018ca94dba697d654ca63 +# env_hash: 7299c486ae839516624059ce41e2f7bca7b6fe26bbb8e922add642cb165bb6ef +# name: radioconda +# version: 2021.05.20 +# channels: conda-forge _libgcc_mutex=0.1=conda_forge _openmp_mutex=4.5=1_gnu adwaita-icon-theme=40.1.1=ha770c72_1 alsa-lib=1.2.3=h516909a_0 appdirs=1.4.4=pyh9f0ad1d_0 argh=0.26.2=pyh9f0ad1d_1002 -at-spi2-atk=2.38.0=hdfca744_2 -at-spi2-core=2.38.0=h0630a04_3 +at-spi2-atk=2.38.0=h0630a04_3 +at-spi2-core=2.40.1=h0630a04_0 atk-1.0=2.36.0=h3371d22_4 attr=2.4.48=h516909a_0 backcall=0.2.0=pyh9f0ad1d_0 @@ -25,10 +28,8 @@ certifi=2020.12.5=py39hf3d152e_1 cffi=1.14.5=py39he32792d_0 chardet=4.0.0=py39hf3d152e_1 click-plugins=1.1.1=py_0 -click=8.0.0=py39hf3d152e_0 +click=8.0.1=py39hf3d152e_0 codec2=0.9.2=h516909a_1 -conda-package-handling=1.7.3=py39h3811e60_0 -conda=4.10.1=py39hf3d152e_0 construct=2.9.45=py_0 cryptography=3.4.7=py39hbca0aa6_0 cycler=0.10.0=py_2 @@ -90,7 +91,6 @@ lcms2=2.12=hddcbb42_0 ld_impl_linux-64=2.35.1=hea4e1c9_2 libad9361-iio=0.2=h5548ebd_2 libaio=0.3.112=h516909a_0 -libarchive=3.5.1=h3f442fb_1 libblas=3.9.0=9_openblas libcap=2.48=h7f98852_0 libcblas=3.9.0=9_openblas @@ -115,7 +115,7 @@ libiio=0.21=ha770c72_6 liblapack=3.9.0=9_openblas liblimesuite=20.10.0=h9c3ff4c_1 libllvm11=11.1.0=hf817b99_2 -libm2k=0.4.0=py39hfbabe7e_2 +libm2k=0.4.0=py39h203f843_3 libnghttp2=1.43.0=h812cca2_0 libogg=1.3.4=h7f98852_1 libopenblas=0.3.15=pthreads_h8fe5266_1 @@ -125,7 +125,6 @@ libpq=13.3=hd57d9b9_0 librsvg=2.50.5=hc3c00ef_0 libsndfile=1.0.31=h9c3ff4c_1 libsodium=1.0.18=h516909a_1 -libsolv=0.7.18=h780b84a_0 libssh2=1.9.0=ha56f1ee_6 libstdcxx-ng=9.3.0=h6de172a_19 libtiff=4.2.0=hbd63e13_2 @@ -142,10 +141,8 @@ limesuite=20.10.0=haf62c5d_1 log4cpp=1.1.3=he1b5a44_1002 lxml=4.6.3=py39h107f48f_0 lz4-c=1.9.3=h9c3ff4c_0 -lzo=2.10=h516909a_1000 mako=1.1.4=pyh44b312d_0 -mamba=0.13.0=py39h951de11_0 -markupsafe=2.0.0=py39h3811e60_0 +markupsafe=2.0.1=py39h3811e60_0 matplotlib-base=3.4.2=py39h2fa2bec_0 matplotlib-inline=0.1.2=pyhd8ed1ab_2 matplotlib=3.4.2=py39hf3d152e_0 @@ -154,7 +151,7 @@ mysql-libs=8.0.23=h935591d_2 ncurses=6.2=h58526e2_4 nspr=4.30=h9c3ff4c_0 nss=3.65=hb5efdd6_0 -numpy=1.20.2=py39hdbf815f_0 +numpy=1.20.3=py39hdbf815f_0 olefile=0.46=pyh9f0ad1d_1 openjpeg=2.4.0=hb52868f_1 openssl=1.1.1k=h7f98852_0 @@ -176,7 +173,6 @@ ptyprocess=0.7.0=pyhd3deb0d_0 pulseaudio=14.0=hb166930_3 pyadi-iio=0.0.7=pyhd8ed1ab_1 pycairo=1.20.0=py39hedcb9fc_1 -pycosat=0.6.3=py39h3811e60_1006 pycparser=2.20=pyh9f0ad1d_2 pygments=2.9.0=pyhd8ed1ab_0 pygobject=3.40.1=py39he5105b2_1 @@ -198,11 +194,8 @@ pyzmq=22.0.3=py39h37b5a0c_1 qt=5.12.9=hda022c4_4 qwt=6.1.6=h7ec6b3e_0 readline=8.1=h46c0cb4_0 -reproc-cpp=14.2.1=h58526e2_0 -reproc=14.2.1=h36c2ea0_0 requests=2.25.1=pyhd3deb0d_0 rtl-sdr=0.6.0=h18f079d_2 -ruamel_yaml=0.15.80=py39h3811e60_1004 scipy=1.6.3=py39hee8e79c_0 sdl=1.2.15=he1b5a44_1 setuptools=49.6.0=py39hf3d152e_3 @@ -216,7 +209,6 @@ soapysdr=0.8.0=py39h1a9c180_0 sqlite=3.35.5=h74cdb3f_0 tk=8.6.10=hed695b0_1 tornado=6.1=py39h3811e60_1 -tqdm=4.60.0=pyhd8ed1ab_0 traitlets=5.0.5=py_0 tzdata=2021a=he74cb21_0 uhd=3.15.0.0=py39hfa8602a_6 @@ -225,6 +217,8 @@ volk=2.4.1=h9c3ff4c_3 watchdog=0.10.4=py39hf3d152e_0 wcwidth=0.2.5=pyh9f0ad1d_2 wxwidgets=3.1.3=h4e80389_4 +xorg-fixesproto=5.0=h14c3975_1002 +xorg-inputproto=2.3.2=h14c3975_1002 xorg-kbproto=1.0.7=h14c3975_1002 xorg-libice=1.0.10=h516909a_0 xorg-libsm=1.2.3=hd9c2040_1000 @@ -232,7 +226,11 @@ xorg-libx11=1.7.1=h7f98852_0 xorg-libxau=1.0.9=h14c3975_0 xorg-libxdmcp=1.1.3=h516909a_0 xorg-libxext=1.3.4=h7f98852_1 +xorg-libxfixes=5.0.3=h7f98852_1004 +xorg-libxi=1.7.10=h7f98852_0 xorg-libxrender=0.9.10=h7f98852_1003 +xorg-libxtst=1.2.3=h7f98852_1002 +xorg-recordproto=1.14.2=h516909a_1002 xorg-renderproto=0.11.1=h14c3975_1002 xorg-xextproto=7.3.0=h14c3975_1002 xorg-xproto=7.0.31=h14c3975_1007 diff --git a/installer_specs/radioconda-linux-64/construct.yaml b/installer_specs/radioconda-linux-64/construct.yaml index 41c3eea..c972ca9 100644 --- a/installer_specs/radioconda-linux-64/construct.yaml +++ b/installer_specs/radioconda-linux-64/construct.yaml @@ -17,11 +17,11 @@ specs: - gqrx=2.14.4=hd665fa0_2 - ipython=7.23.1=py39hef51801_0 - libiio=0.21=ha770c72_6 -- libm2k=0.4.0=py39hfbabe7e_2 +- libm2k=0.4.0=py39h203f843_3 - limesuite=20.10.0=haf62c5d_1 - mamba=0.13.0=py39h951de11_0 - matplotlib=3.4.2=py39hf3d152e_0 -- numpy=1.20.2=py39hdbf815f_0 +- numpy=1.20.3=py39hdbf815f_0 - pandas=1.2.4=py39hde0f152_0 - pyadi-iio=0.0.7=pyhd8ed1ab_1 - python=3.9.4=hffdb5ce_0_cpython @@ -34,5 +34,5 @@ specs: - soapysdr-module-uhd=0.4.1=h75dc44c_2 - soapysdr=0.8.0=py39h1a9c180_0 - uhd=3.15.0.0=py39hfa8602a_6 -version: 2021.05.19 +version: 2021.05.20 write_condarc: true diff --git a/installer_specs/radioconda-osx-64/radioconda-osx-64.txt b/installer_specs/radioconda-osx-64.txt similarity index 90% rename from installer_specs/radioconda-osx-64/radioconda-osx-64.txt rename to installer_specs/radioconda-osx-64.txt index 5e004bb..56bb415 100644 --- a/installer_specs/radioconda-osx-64/radioconda-osx-64.txt +++ b/installer_specs/radioconda-osx-64.txt @@ -1,5 +1,8 @@ # platform: osx-64 -# env_hash: 0c05b827d42179b8b5d679dc2c2817666da9ad533032fb9b7dec009f417cb3dd +# env_hash: 1fccaac301582e71219fb4225bf6963aaedd5b4d0c58ebffbab292f929a40297 +# name: radioconda +# version: 2021.05.20 +# channels: conda-forge adwaita-icon-theme=40.1.1=h694c41f_1 appdirs=1.4.4=pyh9f0ad1d_0 appnope=0.1.2=py39h6e9494a_1 @@ -20,10 +23,8 @@ certifi=2020.12.5=py39h6e9494a_1 cffi=1.14.5=py39h319c39b_0 chardet=4.0.0=py39h6e9494a_1 click-plugins=1.1.1=py_0 -click=8.0.0=py39h6e9494a_0 +click=8.0.1=py39h6e9494a_0 codec2=0.9.2=haf1e3a3_1 -conda-package-handling=1.7.3=py39h89e85a6_0 -conda=4.10.1=py39h6e9494a_0 construct=2.9.45=py_0 cryptography=3.4.7=py39ha2c9959_0 cycler=0.10.0=py_2 @@ -78,7 +79,6 @@ kiwisolver=1.3.1=py39hedf5dff_1 krb5=1.19.1=hcfbf3a7_0 lcms2=2.12=h577c468_0 libad9361-iio=0.2=hd953885_2 -libarchive=3.5.1=h0a5793d_1 libblas=3.9.0=9_openblas libcblas=3.9.0=9_openblas libclang=11.1.0=default_he082bbe_1 @@ -96,14 +96,13 @@ libiio=0.21=h694c41f_6 liblapack=3.9.0=9_openblas liblimesuite=20.10.0=he49afe7_1 libllvm11=11.1.0=hd011deb_2 -libm2k=0.4.0=py39ha4a404c_2 +libm2k=0.4.0=py39ha4a404c_3 libnghttp2=1.43.0=h07e645a_0 libopenblas=0.3.15=openmp_h5e1b9a4_1 libpng=1.6.37=hb0a8c7a_2 libpq=13.3=hea3049e_0 librsvg=2.50.5=hd2a7919_0 libsodium=1.0.18=hbcb3906_1 -libsolv=0.7.18=hcf210ce_0 libssh2=1.9.0=h52ee1ee_6 libtiff=4.2.0=h46d1c8c_2 libusb=1.0.24=h0d85af4_4 @@ -115,10 +114,8 @@ llvm-openmp=11.1.0=hda6cdc1_1 log4cpp=1.1.3=he49afe7_1002 lxml=4.6.3=py39hf41e7f8_0 lz4-c=1.9.3=h046ec9c_0 -lzo=2.10=haf1e3a3_1000 mako=1.1.4=pyh44b312d_0 -mamba=0.13.0=py39hb671511_0 -markupsafe=2.0.0=py39h89e85a6_0 +markupsafe=2.0.1=py39h89e85a6_0 matplotlib-base=3.4.2=py39hb07454d_0 matplotlib-inline=0.1.2=pyhd8ed1ab_2 matplotlib=3.4.2=py39h6e9494a_0 @@ -127,7 +124,7 @@ mysql-libs=8.0.23=h54f5a68_2 ncurses=6.2=h2e338ed_4 nspr=4.30=hcd9eead_0 nss=3.65=h31e2bf1_0 -numpy=1.20.2=py39h7eed0ac_0 +numpy=1.20.3=py39h7eed0ac_0 olefile=0.46=pyh9f0ad1d_1 openjpeg=2.4.0=h6e7aa92_1 openssl=1.1.1k=h0d85af4_0 @@ -145,7 +142,6 @@ prompt-toolkit=3.0.18=pyha770c72_0 ptyprocess=0.7.0=pyhd3deb0d_0 pyadi-iio=0.0.7=pyhd8ed1ab_1 pycairo=1.20.0=py39hbe14034_1 -pycosat=0.6.3=py39hcbf5805_1006 pycparser=2.20=pyh9f0ad1d_2 pygments=2.9.0=pyhd8ed1ab_0 pygobject=3.40.1=py39h8819ad7_1 @@ -167,11 +163,8 @@ pyzmq=22.0.3=py39h7fec2f1_1 qt=5.12.9=h126340a_4 qwt=6.1.6=h3050948_0 readline=8.1=h05e3726_0 -reproc-cpp=14.2.1=h2e338ed_0 -reproc=14.2.1=hbcb3906_0 requests=2.25.1=pyhd3deb0d_0 rtl-sdr=0.6.0=h0d85af4_2 -ruamel_yaml=0.15.80=py39h4b0b724_1004 scipy=1.6.3=py39h056f1c0_0 setuptools=49.6.0=py39h6e9494a_3 six=1.16.0=pyh6c4a22f_0 @@ -184,7 +177,6 @@ soapysdr=0.8.0=py39hf018cea_0 sqlite=3.35.5=h44b9ce1_0 tk=8.6.10=hb0a8c7a_1 tornado=6.1=py39hcbf5805_1 -tqdm=4.60.0=pyhd8ed1ab_0 traitlets=5.0.5=py_0 tzdata=2021a=he74cb21_0 uhd=3.15.0.0=py39he85038b_6 diff --git a/installer_specs/radioconda-osx-64/construct.yaml b/installer_specs/radioconda-osx-64/construct.yaml index 554d012..6c13a89 100644 --- a/installer_specs/radioconda-osx-64/construct.yaml +++ b/installer_specs/radioconda-osx-64/construct.yaml @@ -17,11 +17,11 @@ specs: - gqrx=2.14.4=h7579640_2 - ipython=7.23.1=py39h71a6800_0 - libiio=0.21=h694c41f_6 -- libm2k=0.4.0=py39ha4a404c_2 +- libm2k=0.4.0=py39ha4a404c_3 - limesuite=20.10.0=h1ad935b_1 - mamba=0.13.0=py39hb671511_0 - matplotlib=3.4.2=py39h6e9494a_0 -- numpy=1.20.2=py39h7eed0ac_0 +- numpy=1.20.3=py39h7eed0ac_0 - pandas=1.2.4=py39h4d6be9b_0 - pyadi-iio=0.0.7=pyhd8ed1ab_1 - python=3.9.4=h9133fd0_0_cpython @@ -34,5 +34,5 @@ specs: - soapysdr-module-uhd=0.4.1=h92a74a4_2 - soapysdr=0.8.0=py39hf018cea_0 - uhd=3.15.0.0=py39he85038b_6 -version: 2021.05.19 +version: 2021.05.20 write_condarc: true diff --git a/installer_specs/radioconda-win-64/radioconda-win-64.txt b/installer_specs/radioconda-win-64.txt similarity index 90% rename from installer_specs/radioconda-win-64/radioconda-win-64.txt rename to installer_specs/radioconda-win-64.txt index a485efe..635b3b1 100644 --- a/installer_specs/radioconda-win-64/radioconda-win-64.txt +++ b/installer_specs/radioconda-win-64.txt @@ -1,5 +1,8 @@ # platform: win-64 -# env_hash: f06c0253b45c854fe8e10d5de0f5313923a2765c15b790765cf4200b911c9c06 +# env_hash: 39b75ea4ff0ebe8ac372badec6766c917c3eb4efaa6288fbaabe592ffaf4bf17 +# name: radioconda +# version: 2021.05.20 +# channels: conda-forge,ryanvolz adwaita-icon-theme=40.1.1=h57928b3_1 appdirs=1.4.4=pyh9f0ad1d_0 argh=0.26.2=py38_1001 @@ -18,11 +21,9 @@ certifi=2020.12.5=py38haa244fe_1 cffi=1.14.5=py38hd8c33c5_0 chardet=4.0.0=py38haa244fe_1 click-plugins=1.1.1=py_0 -click=8.0.0=py38haa244fe_0 +click=8.0.1=py38haa244fe_0 codec2=0.9.2=hcd874cb_1 colorama=0.4.4=pyh9f0ad1d_0 -conda-package-handling=1.7.3=py38h31c79cd_0 -conda=4.10.1=py38haa244fe_0 construct=2.9.45=py_0 cryptography=3.4.7=py38hd7da0ea_0 cycler=0.10.0=py_2 @@ -69,17 +70,19 @@ idna=2.10=pyh9f0ad1d_0 intel-openmp=2021.2.0=h57928b3_616 ipython=7.23.1=py38h43734a8_0 ipython_genutils=0.2.0=py_1 +jbig=2.1=h8d14728_2003 jedi=0.18.0=py38haa244fe_2 jpeg=9d=he774522_0 kiwisolver=1.3.1=py38hbd9d945_1 krb5=1.19.1=hbae68bd_0 lcms2=2.12=h2a16943_0 +lerc=2.2.1=h0e60522_0 libad9361-iio=0.2=h3326528_2 -libarchive=3.5.1=hb45042f_2 libblas=3.9.0=9_mkl libcblas=3.9.0=9_mkl libclang=11.1.0=default_h5c34c98_1 libcurl=7.76.1=h789b8ee_2 +libdeflate=1.7=h8ffe710_5 libffi=3.3=h0e60522_2 libglib=2.68.2=h1e62bf3_0 libiconv=1.16=he774522_0 @@ -87,13 +90,12 @@ libiio-c=0.21=h65864e5_6 libiio=0.21=h57928b3_6 liblapack=3.9.0=9_mkl liblimesuite=20.10.0=h0e60522_1 -libm2k=0.4.0=py38haf3f0dc_2 +libm2k=0.4.0=py38haf3f0dc_3 libpng=1.6.37=ha81a0f5_2 librsvg=2.50.5=h09c2f97_0 libsodium=1.0.18=h62dcd97_1 -libsolv=0.7.18=h7755175_0 libssh2=1.9.0=h680486a_6 -libtiff=4.3.0=h0c97f57_0 +libtiff=4.3.0=h0c97f57_1 libusb=1.0.24=h0e60522_2 libxml2=2.9.12=hf5bbc77_0 libxslt=1.1.33=h65864e5_2 @@ -101,15 +103,13 @@ limesuite=20.10.0=hbaad480_1 log4cpp=1.1.3=ha925a31_1002 lxml=4.6.3=py38h292cb97_0 lz4-c=1.9.3=h8ffe710_0 -lzo=2.10=hfa6e2cd_1000 m2w64-gcc-libgfortran=5.3.0=6 m2w64-gcc-libs-core=5.3.0=7 m2w64-gcc-libs=5.3.0=7 m2w64-gmp=6.1.0=2 m2w64-libwinpthread-git=5.0.0.4634.697f757=2 mako=1.1.4=pyh44b312d_0 -mamba=0.13.0=py38hdd88130_0 -markupsafe=2.0.0=py38h294d835_0 +markupsafe=2.0.1=py38h294d835_0 matplotlib-base=3.4.2=py38heae8d8c_0 matplotlib-inline=0.1.2=pyhd8ed1ab_2 matplotlib=3.4.2=py38haa244fe_0 @@ -117,7 +117,7 @@ menuinst=1.4.16=py38h32f6830_1 mkl=2021.2.0=hb70f87d_389 mpir=3.0.0=he025d50_1002 msys2-conda-epoch=20160418=1 -numpy=1.20.2=py38h09042cb_0 +numpy=1.20.3=py38h09042cb_0 olefile=0.46=pyh9f0ad1d_1 openjpeg=2.4.0=hb211442_1 openssl=1.1.1k=h8ffe710_0 @@ -134,7 +134,6 @@ prompt-toolkit=3.0.18=pyha770c72_0 pthreads-win32=2.9.1=hfa6e2cd_3 pyadi-iio=0.0.7=pyhd8ed1ab_1 pycairo=1.20.0=py38h979ce04_1 -pycosat=0.6.3=py38h294d835_1006 pycparser=2.20=pyh9f0ad1d_2 pygments=2.9.0=pyhd8ed1ab_0 pygobject=3.40.1=py38hacb06c2_1 @@ -158,11 +157,8 @@ pyzmq=22.0.3=py38h09162b1_1 qt=5.12.9=h5909a2a_4 qwt=6.1.6=h552f0f6_0 radioconda_console_shortcut=1.0=0 -reproc-cpp=14.2.1=h0e60522_0 -reproc=14.2.1=h8ffe710_0 requests=2.25.1=pyhd3deb0d_0 rtl-sdr=0.6.0=h8ffe710_2 -ruamel_yaml=0.15.80=py38h294d835_1004 scipy=1.6.3=py38he847743_0 sdl=1.2.15=h21ff451_1 setuptools=49.6.0=py38haa244fe_3 @@ -177,7 +173,6 @@ sqlite=3.35.5=h8ffe710_0 tbb=2021.2.0=h2d74725_0 tk=8.6.10=he774522_1 tornado=6.1=py38h294d835_1 -tqdm=4.60.0=pyhd8ed1ab_0 traitlets=5.0.5=py_0 uhd=3.15.0.0=py38h1d4ea3b_6 urllib3=1.26.4=pyhd8ed1ab_0 diff --git a/installer_specs/radioconda-win-64/construct.yaml b/installer_specs/radioconda-win-64/construct.yaml index 5ecd6de..dfc42cf 100644 --- a/installer_specs/radioconda-win-64/construct.yaml +++ b/installer_specs/radioconda-win-64/construct.yaml @@ -18,11 +18,11 @@ specs: - gqrx=2.14.4=h090ae7c_2 - ipython=7.23.1=py38h43734a8_0 - libiio=0.21=h57928b3_6 -- libm2k=0.4.0=py38haf3f0dc_2 +- libm2k=0.4.0=py38haf3f0dc_3 - limesuite=20.10.0=hbaad480_1 - mamba=0.13.0=py38hdd88130_0 - matplotlib=3.4.2=py38haa244fe_0 -- numpy=1.20.2=py38h09042cb_0 +- numpy=1.20.3=py38h09042cb_0 - pandas=1.2.4=py38h60cbd38_0 - pyadi-iio=0.0.7=pyhd8ed1ab_1 - python=3.8.10=h7840368_1_cpython @@ -36,5 +36,5 @@ specs: - soapysdr-module-uhd=0.4.1=h4a99580_2 - soapysdr=0.8.0=py38hbd9d945_0 - uhd=3.15.0.0=py38h1d4ea3b_6 -version: 2021.05.19 +version: 2021.05.20 write_condarc: true From 4d356c39501a999568d417e01f526431701dbfe3 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Thu, 20 May 2021 18:06:46 -0400 Subject: [PATCH 14/17] Add script to build an environment metapackage. --- .github/workflows/build_radioconda.yml | 21 +++- build_metapackage.py | 137 +++++++++++++++++++++++++ buildenv.yaml | 2 + rerender.py | 7 +- 4 files changed, 163 insertions(+), 4 deletions(-) create mode 100755 build_metapackage.py diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index bd3de5b..748ab6c 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -10,7 +10,8 @@ on: env: DISTNAME: radioconda - SOURCE: github.com/ryanvolz/radioconda + LICENSE_ID: BSD-3-Clause + METAPACKAGE_SUMMARY: Metapackage to install the radioconda package set. jobs: build: @@ -64,13 +65,20 @@ jobs: echo $Env:Path python build_installer.py -v - - name: Copy spec and list built installers + - name: Build metapackage + shell: bash -l {0} + env: + PLATFORM: ${{ matrix.PLATFORM }} + run: | + python build_metapackage.py + + - name: Copy spec and list built installers and packages shell: bash env: PLATFORM: ${{ matrix.PLATFORM }} run: | cp installer_specs/$DISTNAME-$PLATFORM.txt dist/ - ls -lh dist + ls -lhR dist - name: Test installer (sh) if: contains(matrix.OS_NAME, 'Linux') || contains(matrix.OS_NAME, 'MacOSX') @@ -145,3 +153,10 @@ jobs: tag: ${{ github.ref }} overwrite: true file_glob: true + + - name: Upload metapackage to Anaconda.org + shell: bash -l {0} + env: + ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }} + run: | + anaconda upload -l test dist/conda-bld/**/* diff --git a/build_metapackage.py b/build_metapackage.py new file mode 100755 index 0000000..c50bf78 --- /dev/null +++ b/build_metapackage.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +import pathlib +import re + +comment_re = re.compile(r"^\s*#\s*(?P.*)\s*$") +key_value_re = re.compile(r"^(?P.*):\s*(?P.*)\s*$") + + +def read_lock_file(lock_file: pathlib.Path) -> dict: + with lock_file.open("r") as f: + lines = f.read().splitlines() + + lock_dict = dict(specs=[]) + for line in lines: + comment_match = comment_re.match(line) + if comment_match: + m = key_value_re.match(comment_match.group("comment")) + if m: + lock_dict[m.group("key")] = m.group("value") + else: + lock_dict["specs"].append(line) + + return lock_dict + + +if __name__ == "__main__": + import argparse + import os + import subprocess + import shutil + import sys + + import conda_build.config + + conda_build_config = conda_build.config.Config() + + cwd = pathlib.Path(".").absolute() + here = pathlib.Path(__file__).parent.absolute().relative_to(cwd) + distname = os.getenv("DISTNAME", "radioconda") + platform = os.getenv("PLATFORM", conda_build_config.subdir) + source = "/".join( + ( + os.getenv("GITHUB_SERVER_URL", "https://github.com"), + os.getenv("GITHUB_REPOSITORY", "ryanvolz/radioconda"), + ) + ) + license_id = os.getenv("LICENSE_ID", "BSD-3-Clause") + summary = os.getenv("METAPACKAGE_SUMMARY", f"Metapackage for {distname}.") + + parser = argparse.ArgumentParser( + description=( + "Build environment metapackage using conda-build." + " Additional command-line options will be passed to conda metapackage." + ) + ) + parser.add_argument( + "lock_file", + type=pathlib.Path, + nargs="?", + default=here / "installer_specs" / f"{distname}-{platform}.txt", + help=( + "Environment lock file for a particular platform" + " (name ends in the platform identifier)." + " (default: %(default)s)" + ), + ) + parser.add_argument( + "-o", + "--output_dir", + type=pathlib.Path, + default=here / "dist" / "conda-bld", + help=( + "Output directory in which the metapackage will be placed." + " (default: %(default)s)" + ), + ) + parser.add_argument( + "--home", + default=source, + help="The homepage for the metapackage. (default: %(default)s)", + ) + parser.add_argument( + "--license", + default=license_id, + help="The SPDX license identifier for the metapackage. (default: %(default)s)", + ) + parser.add_argument( + "--summary", + default=summary, + help="Summary of the package. (default: %(default)s)", + ) + + args, metapackage_args = parser.parse_known_args() + + lock_dict = read_lock_file(args.lock_file) + + name = lock_dict.get("name", distname) + version = lock_dict.get("version", "0") + platform = lock_dict.get("platform", platform) + + env = os.environ.copy() + env["CONDA_SUBDIR"] = platform + + channels = [c.strip() for c in lock_dict.get("channels", "conda-forge").split(",")] + + conda_metapackage_cmdline = [ + "conda", + "metapackage", + name, + version, + "--no-anaconda-upload", + "--home", + args.home, + "--license", + args.license, + "--summary", + args.summary, + ] + for channel in channels: + conda_metapackage_cmdline.extend(["--channel", channel]) + conda_metapackage_cmdline.extend(["--dependencies"] + lock_dict["specs"]) + conda_metapackage_cmdline.extend(metapackage_args) + + proc = subprocess.run(conda_metapackage_cmdline, env=env) + + try: + proc.check_returncode() + except subprocess.CalledProcessError: + sys.exit(1) + + bldpkgs_dir = pathlib.Path(conda_build_config.bldpkgs_dir) + pkg_paths = list(bldpkgs_dir.glob(f"{name}-{version}*.bz2")) + pkg_out_dir = args.output_dir / platform + pkg_out_dir.mkdir(parents=True, exist_ok=True) + + for pkg in pkg_paths: + shutil.copy(pkg, pkg_out_dir) diff --git a/buildenv.yaml b/buildenv.yaml index f394ecd..399b0c9 100644 --- a/buildenv.yaml +++ b/buildenv.yaml @@ -2,4 +2,6 @@ name: buildenv channels: - conda-forge dependencies: + - anaconda-client + - conda-build - constructor diff --git a/rerender.py b/rerender.py index 6b605a4..1bbe4b2 100755 --- a/rerender.py +++ b/rerender.py @@ -215,7 +215,12 @@ if __name__ == "__main__": cwd = pathlib.Path(".").absolute() here = pathlib.Path(__file__).parent.absolute().relative_to(cwd) distname = os.getenv("DISTNAME", "radioconda") - source = os.getenv("SOURCE", "github.com/ryanvolz/radioconda") + source = "/".join( + ( + os.getenv("GITHUB_SERVER_URL", "https://github.com"), + os.getenv("GITHUB_REPOSITORY", "ryanvolz/radioconda"), + ) + ) dt = datetime.datetime.now() version = dt.strftime("%Y.%m.%d") From a454787f72d7facec07b4b4df1edd2791b5b7a87 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Fri, 21 May 2021 12:10:30 -0400 Subject: [PATCH 15/17] Test some build action tweaks. --- .github/workflows/build_radioconda.yml | 32 ++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index 748ab6c..c1ee207 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -11,6 +11,7 @@ on: env: DISTNAME: radioconda LICENSE_ID: BSD-3-Clause + METAPACKAGE_LABEL: test METAPACKAGE_SUMMARY: Metapackage to install the radioconda package set. jobs: @@ -48,29 +49,33 @@ jobs: environment-file: buildenv.yaml - name: Build installer (bash) - if: runner.os != 'Windows' + # if: runner.os != 'Windows' shell: bash -l {0} env: PLATFORM: ${{ matrix.PLATFORM }} + OS_NAME: ${{ matrix.OS_NAME }} run: | + if [ "$OS_NAME" == "Windows" ]; then + PATH=$CONDA_PREFIX/NSIS:$PATH + fi python build_installer.py -v - - name: Build installer (cmd.exe) - if: runner.os == 'Windows' - shell: powershell - env: - PLATFORM: ${{ matrix.PLATFORM }} - run: | - $Env:Path = "$Env:CONDA_PREFIX\NSIS;$Env:Path" - echo $Env:Path - python build_installer.py -v + # - name: Build installer (cmd.exe) + # if: runner.os == 'Windows' + # shell: powershell + # env: + # PLATFORM: ${{ matrix.PLATFORM }} + # run: | + # $Env:Path = "$Env:CONDA_PREFIX\NSIS;$Env:Path" + # echo $Env:Path + # python build_installer.py -v - name: Build metapackage shell: bash -l {0} env: PLATFORM: ${{ matrix.PLATFORM }} run: | - python build_metapackage.py + python build_metapackage.py installer_specs/$DISTNAME-$PLATFORM.txt - name: Copy spec and list built installers and packages shell: bash @@ -102,6 +107,8 @@ jobs: TARGET_VOLUME: CurrentUserHomeDirectory INSTALL_PATH: ${{ github.workspace }}/../../../${{ env.DISTNAME }} run: | + installer -showChoiceChangesXML -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg > pkg-choices.xml + cat pkg-choices.xml installer -verbose -dumplog -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" conda info @@ -159,4 +166,5 @@ jobs: env: ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }} run: | - anaconda upload -l test dist/conda-bld/**/* + micromamba --info + anaconda upload -l $METAPACKAGE_LABEL dist/conda-bld/**/* From 484977687e6914c724487df106084930ab199f09 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Fri, 21 May 2021 12:39:58 -0400 Subject: [PATCH 16/17] Test some more build action tweaks. --- .github/workflows/build_radioconda.yml | 40 ++++++++++++++------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index c1ee207..ea0021a 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -48,8 +48,7 @@ jobs: with: environment-file: buildenv.yaml - - name: Build installer (bash) - # if: runner.os != 'Windows' + - name: Build installer shell: bash -l {0} env: PLATFORM: ${{ matrix.PLATFORM }} @@ -60,16 +59,6 @@ jobs: fi python build_installer.py -v - # - name: Build installer (cmd.exe) - # if: runner.os == 'Windows' - # shell: powershell - # env: - # PLATFORM: ${{ matrix.PLATFORM }} - # run: | - # $Env:Path = "$Env:CONDA_PREFIX\NSIS;$Env:Path" - # echo $Env:Path - # python build_installer.py -v - - name: Build metapackage shell: bash -l {0} env: @@ -77,7 +66,7 @@ jobs: run: | python build_metapackage.py installer_specs/$DISTNAME-$PLATFORM.txt - - name: Copy spec and list built installers and packages + - name: Copy lock file and list built installers and packages shell: bash env: PLATFORM: ${{ matrix.PLATFORM }} @@ -107,9 +96,24 @@ jobs: TARGET_VOLUME: CurrentUserHomeDirectory INSTALL_PATH: ${{ github.workspace }}/../../../${{ env.DISTNAME }} run: | - installer -showChoiceChangesXML -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg > pkg-choices.xml - cat pkg-choices.xml - installer -verbose -dumplog -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME + cat >pkg-choices.xml < + + + + + attributeSetting + 0 + choiceAttribute + selected + choiceIdentifier + io.continuum.pkg.pathupdate + + + + EOF + installer -showChoicesAfterApplyingChangesXML pkg-choices.xml -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME + installer -verbose -dumplog -applyChoiceChangesXML pkg-choices.xml -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" conda info conda list @@ -166,5 +170,5 @@ jobs: env: ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }} run: | - micromamba --info - anaconda upload -l $METAPACKAGE_LABEL dist/conda-bld/**/* + micromamba --help + anaconda upload -l $METAPACKAGE_LABEL --skip-existing dist/conda-bld/**/* From be10dc29cdc16216ecc7b707fd1e56f924accf28 Mon Sep 17 00:00:00 2001 From: Ryan Volz Date: Fri, 21 May 2021 13:25:30 -0400 Subject: [PATCH 17/17] Finalize radioconda metapackage changes. --- .github/workflows/build_radioconda.yml | 4 ++-- README.md | 24 +++++++++++++----------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build_radioconda.yml b/.github/workflows/build_radioconda.yml index ea0021a..6d7673b 100644 --- a/.github/workflows/build_radioconda.yml +++ b/.github/workflows/build_radioconda.yml @@ -11,7 +11,7 @@ on: env: DISTNAME: radioconda LICENSE_ID: BSD-3-Clause - METAPACKAGE_LABEL: test + METAPACKAGE_LABEL: main METAPACKAGE_SUMMARY: Metapackage to install the radioconda package set. jobs: @@ -112,7 +112,6 @@ jobs: EOF - installer -showChoicesAfterApplyingChangesXML pkg-choices.xml -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME installer -verbose -dumplog -applyChoiceChangesXML pkg-choices.xml -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME eval "$($INSTALL_PATH/bin/conda shell.bash hook)" conda info @@ -166,6 +165,7 @@ jobs: file_glob: true - name: Upload metapackage to Anaconda.org + if: startsWith(github.ref, 'refs/tags/') shell: bash -l {0} env: ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }} diff --git a/README.md b/README.md index aceb43d..a9a8eec 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,19 @@ Once you have radioconda installed, you can stay up to date for all packages wit ### Upgrade to latest release -To install the latest release in particular, run (on Windows): +To install the latest release in particular, run + + mamba upgrade -c ryanvolz radioconda + +### Install a particular release + +To install a particular release version, substitute the desired version number and run + + mamba install -c ryanvolz radioconda=20NN.NN.NN + +### Install from environment file + +You can also install from the released environment file (on Windows): mamba install --file https://github.com/ryanvolz/radioconda/releases/latest/download/radioconda-win-64.txt @@ -102,16 +114,6 @@ To install the latest release in particular, run (on Windows): mamba install --file https://github.com/ryanvolz/radioconda/releases/latest/download/radioconda-$(conda info | sed -n -e 's/^.*platform : //p').txt -### Install a particular release - -To install the package versions associated with a particular release, substitute the release number and run the following (on Windows): - - mamba install --file https://github.com/ryanvolz/radioconda/releases/download/20NN.NN.NN/radioconda-win-64.txt - -(on Linux/macOS): - - mamba install --file https://github.com/ryanvolz/radioconda/releases/download/20NN.NN.NN/radioconda-$(conda info | sed -n -e 's/^.*platform : //p').txt - ## Additional Installation for Device Support To use particular software radio devices, it might be necessary to install additional drivers or firmware. Find your device below and follow the instructions. (Help add to this section by filing an issue if the instructions don't work or you have additional instructions to add!)