diff --git a/.ci/get_shell_profile.sh b/.ci/get_shell_profile.sh new file mode 100755 index 0000000..3da1bb2 --- /dev/null +++ b/.ci/get_shell_profile.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +OS="$(uname -s)" + +case $1 in + "fish") + CONFIG_DIR="$(fish -c 'echo -n $__fish_config_dir')" + echo "${CONFIG_DIR-"$HOME/.config/fish"}/fish.config" + ;; + "zsh") + echo "$HOME/.zshrc" + ;; + "bash") + if [ "$OS" = "Darwin" ]; then + echo "$HOME/.profile" + else + echo "$HOME/.bashrc" + fi + ;; + *) + exit 1 + ;; +esac diff --git a/.ci/install.sh b/.ci/install.sh index 944850e..740af80 100755 --- a/.ci/install.sh +++ b/.ci/install.sh @@ -20,7 +20,7 @@ parse_args() { SKIP_SHELL="true" shift # past argument ;; - --force-install) + --force-install | --force-no-brew) echo "\`--force-install\`: I hope you know what you're doing." >&2 FORCE_INSTALL="true" shift @@ -47,13 +47,13 @@ set_filename() { FILENAME="fnm-linux" elif [ "$OS" == "Darwin" ] && [ "$FORCE_INSTALL" == "true" ]; then FILENAME="fnm-macos" + USE_HOMEBREW="false" + echo "Downloading the latest fnm binary from GitHub..." + echo " Pro tip: it's eaiser to use Homebrew for managing fnm in MacOS." + echo " Remove the \`--force-no-brew\` so it will be easy to upgrade." elif [ "$OS" == "Darwin" ]; then - echo "Hey! Thanks for trying fnm." - echo "MacOS installation works better using Homebrew." - echo "Please consider installing using:" - echo " $ brew install Schniz/tap/fnm" - echo "or run the script again with the \`--force-install\` option." - exit 1 + USE_HOMEBREW="true" + echo "Downloading fnm using Homebrew..." else echo "OS $OS is not supported." echo "If you think that's a bug - please file an issue to https://github.com/Schniz/fnm/issues" @@ -62,27 +62,31 @@ set_filename() { } download_fnm() { - if [ "$RELEASE" == "latest" ]; then - URL=https://github.com/Schniz/fnm/releases/latest/download/$FILENAME.zip + if [ "$USE_HOMEBREW" == "true" ]; then + brew install Schniz/tap/fnm > /dev/null else - URL=https://github.com/Schniz/fnm/releases/download/$RELEASE/$FILENAME.zip - fi - - DOWNLOAD_DIR=$(mktemp -d) + if [ "$RELEASE" == "latest" ]; then + URL="https://github.com/Schniz/fnm/releases/latest/download/$FILENAME.zip" + else + URL="https://github.com/Schniz/fnm/releases/download/$RELEASE/$FILENAME.zip" + fi - echo "Downloading $URL..." + DOWNLOAD_DIR=$(mktemp -d) - mkdir -p $INSTALL_DIR &>/dev/null - curl --progress-bar -L $URL -o $DOWNLOAD_DIR/$FILENAME.zip + echo "Downloading $URL..." - if [ 0 -ne $? ]; then - echo "Download failed. Check that the release/filename are correct." - exit 1 - fi; + mkdir -p "$INSTALL_DIR" &>/dev/null + curl --progress-bar -L "$URL" -o "$DOWNLOAD_DIR/$FILENAME.zip" - unzip -q $DOWNLOAD_DIR/$FILENAME.zip -d $DOWNLOAD_DIR - mv $DOWNLOAD_DIR/$FILENAME/fnm $INSTALL_DIR/fnm - chmod u+x $INSTALL_DIR/fnm + if [ 0 -ne $? ]; then + echo "Download failed. Check that the release/filename are correct." + exit 1 + fi + + unzip -q "$DOWNLOAD_DIR/$FILENAME.zip" -d "$DOWNLOAD_DIR" + mv "$DOWNLOAD_DIR/$FILENAME/fnm" "$INSTALL_DIR/fnm" + chmod u+x "$INSTALL_DIR/fnm" + fi } check_dependencies() { @@ -104,6 +108,16 @@ check_dependencies() { SHOULD_EXIT="true" fi + if [ "$USE_HOMEBREW" = "true" ]; then + echo -n "Checking availability of Homebrew (brew)... " + if hash brew 2>/dev/null; then + echo "OK!" + else + echo "Missing!" + SHOULD_EXIT="true" + fi + fi + if [ "$SHOULD_EXIT" = "true" ]; then exit 1 fi diff --git a/.ci/test_installation_script.sh b/.ci/test_installation_script.sh new file mode 100755 index 0000000..7311441 --- /dev/null +++ b/.ci/test_installation_script.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +DIRECTORY="$(dirname "$0")" +SHELL_TO_RUN="$1" +PROFILE_FILE="$("$DIRECTORY/get_shell_profile.sh" "$SHELL_TO_RUN")" + +echo "Profile is $PROFILE_FILE" + +$SHELL_TO_RUN -c ' + fnm install 12.5.0 + fnm ls | grep 12.5.0 + + echo "fnm ls worked." +' + +$SHELL_TO_RUN -c ' + fnm use 12.5.0 + node --version | grep 12.5.0 + + echo "node --version worked." +' diff --git a/.github/workflows/installation_script.yml b/.github/workflows/installation_script.yml index 1099e5f..bf87248 100644 --- a/.github/workflows/installation_script.yml +++ b/.github/workflows/installation_script.yml @@ -1,81 +1,77 @@ name: Installation script on: pull_request: + paths: + - .ci/install.sh push: branches: - master + paths: + - .ci/install.sh jobs: - install_on_linux: - runs-on: ubuntu-latest + test_against_latest_release: + name: Test against latest release strategy: matrix: - include: - - shell: fish - source: ~/.config/fish/config.fish - - shell: zsh - source: ~/.zshrc - - shell: bash - source: ~/.bashrc + shell: [fish, zsh, bash] + setup: + - os: ubuntu + script_arguments: '' + - os: macos + script_arguments: '' + - os: macos + script_arguments: '--force-no-brew' + runs-on: ${{ matrix.setup.os }}-latest steps: - uses: actions/checkout@v2 - run: "sudo apt-get install -y ${{ matrix.shell }}" - name: Install shell + name: Install ${{matrix.shell}} using apt-get + if: matrix.setup.os == 'ubuntu' + - run: "brew install ${{ matrix.shell }}" + name: Install ${{matrix.shell}} using Homebrew + if: matrix.setup.os == 'macos' - run: "cp ~/.bashrc ~/.bashrc.bak && echo '. ~/.bashrc.bak' > ~/.bashrc" name: reset bashrc file - - run: "env SHELL=$(which ${{ matrix.shell }}) bash ./.ci/install.sh" + - run: "env SHELL=$(which ${{ matrix.shell }}) bash ./.ci/install.sh ${{ matrix.setup.script_arguments }}" name: Run the installation script + - run: ./.ci/test_installation_script.sh ${{ matrix.shell }} + name: 'Test installation script' - - run: | - ${{ matrix.shell }} -c ' - source ${{ matrix.source }} - fnm install 12.5.0 - fnm ls | grep 12.5.0 - ' - name: 'Install a Node version with `fnm install`' - - - run: | - ${{ matrix.shell }} -c ' - source ${{ matrix.source }} - fnm use 12.5.0 - node --version | grep 12.5.0 - ' - name: 'Check switching versions with `fnm use`' - - install_on_mac: - runs-on: macos-latest - strategy: - matrix: - include: - - shell: fish - source: ~/.config/fish/config.fish - - shell: zsh - source: ~/.zshrc - - shell: bash - source: ~/.bashrc - steps: - - uses: actions/checkout@v2 - - run: "brew install ${{ matrix.shell }}" - name: Install shell - - name: reset bashrc file - run: | - cp ~/.bashrc ~/.bashrc.bak - echo '. ~/.bashrc.bak' > ~/.bashrc - - run: "env SHELL=$(which ${{ matrix.shell }}) bash ./.ci/install.sh --force-install" - name: Run the installation script + # install_on_mac_binary: + # runs-on: macos-latest + # strategy: + # matrix: + # include: + # - shell: fish + # source: ~/.config/fish/config.fish + # - shell: zsh + # source: ~/.zshrc + # - shell: bash + # source: ~/.bashrc + # steps: + # - uses: actions/checkout@v2 + # - run: "brew install ${{ matrix.shell }}" + # name: Install shell + # - name: reset bashrc file + # run: | + # cp ~/.bashrc ~/.bashrc.bak + # echo '. ~/.bashrc.bak' > ~/.bashrc + # - run: "env SHELL=$(which ${{ matrix.shell }}) bash ./.ci/install.sh --force-install" + # name: Run the installation script - - name: 'Install a Node version with `fnm install`' - run: | - ${{ matrix.shell }} -c ' - source ${{ matrix.source }} - fnm install 12.5.0 - fnm ls | grep 12.5.0 - ' + # - name: 'Install a Node version with `fnm install`' + # run: | + # ${{ matrix.shell }} -c ' + # source ${{ matrix.source }} + # fnm install 12.5.0 + # fnm ls | grep 12.5.0 + # ' - - name: 'Check switching versions with `fnm use`' - run: | - ${{ matrix.shell }} -c ' - source ${{ matrix.source }} - fnm use 12.5.0 - node --version | grep 12.5.0 - ' + # - name: 'Check switching versions with `fnm use`' + # run: | + # ${{ matrix.shell }} -c ' + # source ${{ matrix.source }} + # fnm use 12.5.0 + # node --version | grep 12.5.0 + # '