image: php:7.2-fpm

stages:
  - bundle
  - release

cache:
  paths:
    - vendor/
    - node_modules/

before_script:
  - apt-get update -y

  # Install git (the php image doesn't have it) which is required by composer
  - apt-get install git -y

  # install rsync for file transfers
  - apt-get install rsync -y

  # install wget to download archives
  - apt-get install wget

  # Install composer
  - apt-get install zip unzip
  - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  - php composer-setup.php
  - php -r "unlink('composer-setup.php');"

  # Install NodeJS for NPM
  - curl -sL https://deb.nodesource.com/setup_12.x | bash -
  - apt-get update && apt-get install -y nodejs

  # Install php and js dependencies
  - php composer.phar install --no-dev --ignore-platform-reqs
  - npm install

  # build all UI assets
  - npm run build

bundle_app:
  stage: bundle
  script:
    # download GeoLite2-City archive and extract it to writable/uploads
    - wget -c "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=$MAXMIND_LICENCE_KEY&suffix=tar.gz" -O - | tar -xz -C ./writable/uploads/

    # rename extracted archives' folders
    - mv ./writable/uploads/GeoLite2-City* ./writable/uploads/GeoLite2-City

    # create bundle folder: uses .rsync-filter (-F) file to copy only needed files
    - rsync -aF --progress . ./castopod
  artifacts:
    name: "castopod-${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}"
    paths:
      - castopod
  except:
    - main
    - beta
    - alpha

release_app:
  stage: release
  script:
    # install required packages for prepare-release.sh script
    - apt-get install jq -y
    - apt-get install zip -y

    # make prepare-release.sh executable
    - chmod +x ./prepare-release.sh

    # IMPORTANT: delete local git tags before release to prevent eventual script failure (ie. tag already exists)
    - git tag | xargs git tag -d

    # run semantic-release script (configured in `.releaserc.json` file)
    - npm run release
  only:
    - main
    - alpha
    - beta
