Skip to content

Instantly share code, notes, and snippets.

@naala89
Last active January 13, 2023 04:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save naala89/62bc4aaee590a8e609f8b0166cf0c9e9 to your computer and use it in GitHub Desktop.
Save naala89/62bc4aaee590a8e609f8b0166cf0c9e9 to your computer and use it in GitHub Desktop.

Download a branch or tag from a reopository into a destination.

This is a script I am using to download a branch or tag from a repository in Gitlab or GitHub. It is used in https://gitlab.com/apiopenstudio/docker_images/apiopenstudio_docker_prod and I wanted to share it for anyone that might find it useful. It takes 3 inputs:

  1. Repository URL (examples: https://github.com/naala89/apiopenstudio, https://gitlab.com/apiopenstudio/apiopenstudio)
  2. Branch name (optional)
  3. Tag name (optional)

example usage:

./download.sh https://github.com/naala89/apiopenstudio 1.0.0-beta2

#!/usr/bin/env bash

CI_REPOSITORY=$1
BRANCH=$2
TAG=$3
FILE_EXTENSION="zip"
DESTINATION="/var/www/html"

REPO_NAME=${CI_REPOSITORY##*/}

if [ -n "$(echo "${CI_REPOSITORY}" | grep "github.com")" ] ; then
  ARCHIVE_PATTERN="BRANCH_TAG"
  URL_PATTERN="CI_REPOSITORY/archive/refs/REFS/ARCHIVE_NAME.FILE_EXTENSION"
elif [ -n "$(echo "${CI_REPOSITORY}" | grep "gitlab.com")" ] ; then
  ARCHIVE_PATTERN="REPO_NAME-BRANCH_TAG"
  URL_PATTERN="CI_REPOSITORY/-/archive/BRANCH_TAG/ARCHIVE_NAME.FILE_EXTENSION"
else
  echo "Could not match repository domain."
  exit 1
fi

if [ ! -z "${BRANCH}" ] ; then
  REFS="heads"
  BRANCH_TAG="${BRANCH}"
elif [ ! -z "${TAG}" ] ; then
  REFS="tags"
  BRANCH_TAG="${TAG}"
else
  echo "Could not match branch or tag."
  exit 1
fi

ARCHIVE_NAME=$(echo "${ARCHIVE_PATTERN}" | \
  sed "s|REPO_NAME|${REPO_NAME}|g" | \
  sed "s|BRANCH_TAG|${BRANCH_TAG}|g" | \
  sed "s|\/|-|g")

URL=$(echo "${URL_PATTERN}" | \
  sed "s|CI_REPOSITORY|${CI_REPOSITORY}|g" | \
  sed "s|REFS|${REFS}|g" | \
  sed "s|ARCHIVE_NAME|${ARCHIVE_NAME}|g" | \
  sed "s|FILE_EXTENSION|${FILE_EXTENSION}|g" | \
  sed "s|BRANCH_TAG|${BRANCH_TAG}|g")

curl -L "${URL}" -o "${ARCHIVE_NAME}.${FILE_EXTENSION}"
unzip "${ARCHIVE_NAME}.${FILE_EXTENSION}"
rm -R "${DESTINATION}/${ARCHIVE_NAME}"
mv "${ARCHIVE_NAME}" "${DESTINATION}/${ARCHIVE_NAME}"
rm "${ARCHIVE_NAME}.${FILE_EXTENSION}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment