From 10a0ad4e70aab29da7cfb11fb33eaaa0306ef361 Mon Sep 17 00:00:00 2001 From: Valentin Niess Date: Mon, 8 Nov 2021 13:39:19 +0100 Subject: [PATCH] Add AppImage --- .github/workflows/appimage.yml | 26 +++++++++++++++++++++++++ README.md | 27 +++++++++++++++++++------- dist/appimage/AppRun | 2 ++ dist/{linux.sh => appimage/build.sh} | 28 ++++++++++++--------------- dist/appimage/danton.appdata.xml | 27 ++++++++++++++++++++++++++ dist/appimage/danton.desktop | 8 ++++++++ dist/appimage/danton.png | Bin 0 -> 11024 bytes 7 files changed, 95 insertions(+), 23 deletions(-) create mode 100644 .github/workflows/appimage.yml create mode 100755 dist/appimage/AppRun rename dist/{linux.sh => appimage/build.sh} (56%) create mode 100644 dist/appimage/danton.appdata.xml create mode 100644 dist/appimage/danton.desktop create mode 100644 dist/appimage/danton.png diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml new file mode 100644 index 0000000..ca14da5 --- /dev/null +++ b/.github/workflows/appimage.yml @@ -0,0 +1,26 @@ +name: AppImage +on: + push: + tags: + - v* + +jobs: + AppImage: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: true + + - name: Build + run: | + ./dist/appimage/build.sh + echo "DANTON_APPIMAGE=danton-$(arch).AppImage" >> $GITHUB_ENV + echo "DANTON_VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + + - name: Upload + uses: AButler/upload-release-assets@v2.0 + with: + files: ${{ env.DANTON_APPIMAGE }} + repo-token: ${{ secrets.GITHUB_TOKEN }} + release-tag: ${{ env.DANTON_VERSION }} diff --git a/README.md b/README.md index e0ab074..f59cae5 100755 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## Description DANTON is a __C99 library__ dedicated to the sampling of decaying taus from ultra high energy neutrinos interacting in the Earth. It can run in forward or -backward Monte-Carlo. it can also be configured to sample tau fluxes instead of +backward Monte Carlo. it can also be configured to sample tau fluxes instead of decay densities, or to sample transmitted neutrinos fluxes. The library is shipped with an __executable__, `danton` which takes a *data @@ -23,9 +23,22 @@ detailed topography can be provided from world wide elevation models, e.g. [SRTMGL1]: https://lpdaac.usgs.gov/dataset_discovery/measures/measures_products_table/srtmgl1_v003 ## Installation -DANTON requires a UNIX system, eg. Linux or OSX. The provided -[Makefile](Makefile) builds `libdanton` as a shared library as well as the -`danton` executable, e.g. as: +DANTON requires a UNIX system, eg. Linux or OSX. On Linux, the latest version of +the danton executable is available as an AppImage, from the +[releases](https://github.com/niess/danton/releases) assets, e.g. as: +```bash +# Fetch the danton AppImage from GitHub +wget https://github.com/niess/danton/releases/download/v0.3/danton-x86_64.AppImage + +# Make the downloaded binary executable +chmod u+x danton-x86_64.AppImage + +# Run the AppImage +./danton-x86_64.AppImage path/to/card.json +``` + +Alternatively, the provided [Makefile](Makefile) builds `libdanton` as a shared +library as well as the `danton` executable, e.g. as: ```bash # Fetch the source and deps from GitHub git clone --recursive https://github.com/niess/danton.git @@ -53,11 +66,11 @@ can also be found in the [examples/cards](examples/cards) folder. ### Root items ``` decay boolean If `true` the sampled taus are decayed. -events integer The number of Monte-Carlo events to run. +events integer The number of Monte Carlo events to run. longitudinal boolean If `true` the transverse transport is disabled. mode string The run mode, one of "backward", "forward" or "grammage". output-file string, null The output file name or `null` for `stdout`. -requested integer The requested number of valid Monte-Carlo events +requested integer The requested number of valid Monte Carlo events seed unsigned, null The simulation random seed. If null, then the seed is set from the OS entropy using /dev/urandom. ``` @@ -123,7 +136,7 @@ weight float The weight of the primary, i.e. the integra ``` append boolean If `true`, append to the output file. path string Path to the output file. -verbosity integer Verbosity level for recording Monte-Carlo steps. +verbosity integer Verbosity level for recording Monte Carlo steps. ``` ## License diff --git a/dist/appimage/AppRun b/dist/appimage/AppRun new file mode 100755 index 0000000..ac3c05a --- /dev/null +++ b/dist/appimage/AppRun @@ -0,0 +1,2 @@ +#! /bin/bash +DANTON_PREFIX=$APPDIR $APPDIR/bin/danton $* diff --git a/dist/linux.sh b/dist/appimage/build.sh similarity index 56% rename from dist/linux.sh rename to dist/appimage/build.sh index 27a7180..33783b2 100755 --- a/dist/linux.sh +++ b/dist/appimage/build.sh @@ -1,5 +1,8 @@ #! /bin/bash +# Script base directory. +basedir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + # Generate the binaries SCRIPT=$(cat <<-END echo "building danton with \$(gcc --version | head -n 1)" @@ -23,20 +26,13 @@ cp -rL include AppDir ./AppDir/bin/danton examples/cards/backward-tau-decays.json > /dev/null rm -f steps.json -# Bundle AppImage meta and entry point -cat << END > AppDir/danton.desktop -[Desktop Entry] -Type=Application -Name=danton -Exec=danton -Comment=Simulate the coupled transport of ultra high energy taus and neutrinos through the Earth, by Monte-Carlo -Icon=danton -Categories=Science; -Terminal=true -END +# Bundle AppImage meta and AppRun +cp ${basedir}/danton.desktop AppDir +cp ${basedir}/danton.png AppDir +cp ${basedir}/danton.appdata.xml AppDir +cp ${basedir}/AppRun AppDir -cat << END > AppDir/AppRun -#! /bin/bash -DANTON_PREFIX=\$APPDIR \$APPDIR/bin/danton \$* -END -chmod u+x AppDir/AppRun +# Build the AppImage +appimagetool=appimagetool-$(arch).AppImage +[ -e ${appimagetool} ] || wget https://github.com/AppImage/AppImageKit/releases/download/continuous/${appimagetool} && chmod u+x ${appimagetool} +./${appimagetool} AppDir diff --git a/dist/appimage/danton.appdata.xml b/dist/appimage/danton.appdata.xml new file mode 100644 index 0000000..8328317 --- /dev/null +++ b/dist/appimage/danton.appdata.xml @@ -0,0 +1,27 @@ + + + danton + MIT + LGL-3.0 + Danton + + Simulate the coupled transport of ultra high energy taus and neutrinos + through the Earth, by Monte-Carlo. + + +

Danton (DecAying Taus frOm Neutrinos) is an executable dedicated to + the sampling of decaying taus from ultra high energy neutrinos + interacting in the Earth. It can run in forward or backward + Monte Carlo. it can also be configured to sample tau fluxes instead + of decay densities, or to sample transmitted neutrinos fluxes. The + danton executable takes a data card in JSON format as argument. + Data cards syntax and examples are available from + https://github.com/niess/danton. +

+
+ danton.desktop + https://github.com/niess/danton + + danton + +
diff --git a/dist/appimage/danton.desktop b/dist/appimage/danton.desktop new file mode 100644 index 0000000..09a5aa1 --- /dev/null +++ b/dist/appimage/danton.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=danton +Exec=danton +Comment=Simulate the coupled transport of ultra high energy taus and neutrinos through the Earth, by Monte-Carlo +Icon=danton +Categories=Science; +Terminal=true diff --git a/dist/appimage/danton.png b/dist/appimage/danton.png new file mode 100644 index 0000000000000000000000000000000000000000..942c4737d3921fe2592a654131d63a002e193b74 GIT binary patch literal 11024 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 G