Bootstrap: library
From: default/alpine:3.14.0

%post
  # Install dependencies
  apk add --no-cache bash
  apd add --no-cache --virtual .build-deps gpg curl

  # Make our lives easier by declaring some constants
  export JULIA_GPG="3673DF529D9049477F76B37566E3C7DC03D6E495"
  export JULIA_VERSION="1.6.2"
  export JULIA_PATH=/usr/local/julia
  export PATH=$JULIA_PATH/bin:$PATH
  export tarArch='x86_64'
  export dirArch='x64'
  export sha256='5ff279bc733a99a9582fd9b39eb3d18a3fa77b9d3d2733039279a250c8c5d49c'

  # Download Julia
  export folder="$(echo "$JULIA_VERSION" | cut -d. -f1-2)"
  curl -fL -o julia.tar.gz.asc "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-linux-${tarArch}.tar.gz.asc"
  curl -fL -o julia.tar.gz     "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-linux-${tarArch}.tar.gz"

  # Security check step 1: verify via sha256
  echo "${sha256} *julia.tar.gz" | sha256sum -c -

  # Security check step 2: verify via GPG
  export GNUPGHOME="$(mktemp -d)"
  gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$JULIA_GPG"
  gpg --batch --verify julia.tar.gz.asc julia.tar.gz
  command -v gpgconf > /dev/null && gpgconf --kill all
  rm -rf "$GNUPGHOME" julia.tar.gz.asc

  # Extract Julia
  mkdir "$JULIA_PATH"
  tar -xzf julia.tar.gz -C "$JULIA_PATH" --strip-components 1
  rm julia.tar.gz

  # Cleanup build dependencies
  apk del --no-cache .build-deps

%environment
  export JULIA_PATH=/usr/local/julia
  export PATH=$JULIA_PATH/bin:$PATH

%test
  cat << "EOF" > /tmp/singularity-test.sh
  #!/bin/bash
  CMDS=('bash' 'ps' 'julia')
  for CMD in "${CMDS[@]}"; do
    if ! command -v "$CMD"; then
      echo "command $CMD not found!"
      FAILED_TESTS=1
    fi
  done
  # Abort if a test failed
  if [ -n "$FAILED_TESTS" ]; then
    exit 1
  fi
  EOF
  chmod +x /tmp/singularity-test.sh
  bash /tmp/singularity-test.sh


%runscript
  julia "$@"

%labels
  Author 25492070+MillironX@users.noreply.github.com
  SoftwareVersion v1.6.2
  SingularityDefinitionVersion 1

%help
  Julia
  =====

  Julia is a high-level dynamic programming language designed to address the
  needs of high-performance numerical analysis and computational science. It
  provides a sophisticated compiler, distributed parallel execution, numerical
  accuracy, and an extensive mathematical function library.
  Source: GitHub (<https://github.com/topics/julia>)

  For more help, see
  - <https://julialang.org>
  - <https://github.com/JuliaLang/julia>
  - <https://github.com/MillironX/singularity-builds>
