This repository contains a deploy.sh
script for deploying generated files to a
git branch, such as when building a single-page app using Yeoman or
Jekyll and deploying to GitHub Pages. Unlike the
git-subtree approach, it does not require the generated files be
committed to the source branch. It keeps a linear history on the deploy branch
and does not make superfluous commits or deploys when the generated files do not
change.
For an example of use, see X1011/verge-mobile-bingo. For development info, see contributing.md.
Download the script and make it executable. It can be done with wget
and
chmod
as follows:
wget https://github.com/SwedbankPay/git-directory-deploy/raw/1.0.0/deploy.sh
chmod +x deploy.sh
Replace 1.0.0
in the URL with whatever version number of deploy.sh
you would
like. Pinning to a Git tag instead of master
ensures that no breaking changes
are pulled down unintentionally.
Then and edit these variables within it as needed to fit your project:
deploy_directory
: root of the tree of files to deploydeploy_branch
: branch to commit files to and push to origindefault_username
,default_email
: identity to use for git commits if none is set already. Useful for CI servers.repo
: repository to deploy to. Must be readable and writable. The default of "origin" will not work on Travis CI, since it uses the read-only git protocol. In that case, it is recommended to store a GitHub token in a secure environment variable and use it in an HTTPS URL like this:repo=https://$[email protected]/user/repo.git
Warning: there is currently an issue where the repo URL may be output if an operation fails.
You can also define any of variables using environment variables and configuration files:
GIT_DEPLOY_DIR
GIT_DEPLOY_BRANCH
GIT_DEPLOY_REPO
The script will set these variables in this order of preference:
- Defaults set in the script itself.
- Environment variables.
.env
file in the path where you're running the script.- File specified on the command-line (see the
-c
option below).
Whatever values set later in this list will override those set earlier.
Do this every time you want to deploy, or have your CI server do it.
- check out the branch or commit of the source you want to use. The script will use this commit to generate a message when it makes its own commit on the deploy branch.
- generate the files in
deploy_directory
- make sure you have no uncommitted changes in git's index. The script will abort if you do. (It's ok to have uncommitted files in the work tree; the script does not touch the work tree.)
- if
deploy_directory
is a relative path (the default is), make sure you are in the directory you want to resolve against. (For the default, this means you should be in the project's root.) - run
./deploy.sh
-h
, --help
: show the program's help info.
-c
, --config-file
: specify a file that overrides the script's default
configuration, or those values set in .env
. The syntax for this file should be
normal var=value
declarations. This option must come first on the
command-line.
-m
, --message <message>
: specify message to be used for the commit on
deploy_branch
. By default, the message is the title of the source commit,
prepended with 'publish: '.
-n
, --no-hash
: don't append the hash of the source commit to the commit
message on deploy_branch
. By default, the hash will be appended in a new
paragraph, regardless of whether a message was specified with -m
.
-v
, --verbose
: echo expanded commands as they are executed, using the xtrace
option. This can be useful for debugging, as the output will include the values
of variables that are being used, such as $commit_title and $deploy_directory.
However, the script makes special effort to not output the value of $repo, as it
may contain a secret authentication token.
-e
, --allow-empty
: allow deployment of an empty directory. By default, the
script will abort if deploy_directory
is empty.