Categories
Gitflow Samuel

Gitflow Real World Example

The notes below are from a real world example of updating WordPress core and plugins on a website stored in a repo following the gitflow model. We already went over a test run of updating WordPress in a gitflow repo in our earlier post, if you are new to working with gitflow you should start there.

Clone down a copy of the repo into htdocs

cd /
ls
cd /Applications/MAMP/htdocs
cd /project-folder-name
Git clone git@github.com:user-name/repo-name.git
Now fetch the headers:
Git fetch
Git remote (to see remote branches)

git lfs install (follow steps here if this is the first time doing this, we will need to install this on our system:
https://help.github.com/articles/installing-git-large-file-storage/)

npm install (check for packages.json first, this command will install all the packages listed in in package.json file)

Troubleshoot NPM Install

You will probably get an NPM install message of:
Darwin 14.5.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v6.11.2
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE

npm ERR! libxmljs@0.14.3 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the libxmljs@0.14.3 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the libxmljs package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs libxmljs
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls libxmljs
npm ERR! There is likely additional logging output above.

To fix this were going to run:
Sudo npm cache clean –f
Sudo npm install –g n
Sudo n 4.7.0
Sudo npm install npm –g
Sudo npm uninstall node-gyp –g

Npm install
*Now all packages should install correctly

Source: https://stackoverflow.com/questions/38058386/why-is-node-gyp-rebuild-failing-on-mac-osx-el-capitan/38102743#38102743

Open repo up in source tree and verify that master and dev are in sync

Open SourceTree and create repo from local
Checkout dev branch by clicking odouble-clickinguble clicking dev, or manually run:
Git checkout dev in terminal window
Review the SourceTree graph to confirm branches are in sync

To login to Plesk go to:
https://[[ipaddress]]:8443/
click database > phpmy admin export

Create local copies of the repo and DB and store separately in case of an error/issue
Copy the repo and sql dump file onto desktop

Create the local Database & activate the site to use it

Open gitignore to confirm file name of local DB config file.
Create new config file, usually wp-config.local.php. Copy a standard wp-config file and re-save it as wp-config.local.php

Start MAMP then open up phpmy admin
Create DB, import sql dump file from live, then add information to wp-config.local

Change website URL in wp_options table to use local url in both places (http://localhost:8888/site-name)

Troubleshoot 500 server error

Navigate to localahost:8888/folder-name
If we get this error:
Localhost is currently unable to handle this request. HTTP ERROR 500
Then look in the error log by opening up terminal and typing:
tail -n 20 /Applications/MAMP/logs/php_error.log

It shows us an error of:
[20-Dec-2017 18:37:18 Europe/Berlin] PHP Fatal error: Uncaught Error: Call to undefined function wp() in /Applications/MAMP/htdocs/churchill-mainsite/Churchill-Center-School/wordpress/wp-blog-header.php:16
Stack trace:
#0 /Applications/MAMP/htdocs/churchill-mainsite/Churchill-Center-School/index.php(17): require()

To fix this we need to create a wp-config.local (copy a full WP-config file). The previous one we copied was not a complete file and it was giving us the dreaded white screen of death!

Create New Feature Branch
git checkout -b feature/wp-update dev

Turn Permalinks off to test pages locally:
Go to settings > permalinks and set them to plain (it was on custom, /blog/%postname%/)

Update WordPress
-update core first
-check the plugins page to verify if any plugins are doing major releases (jumping a whole feature number)
-update plugins one by one checking site for errors after each update

Turn Debug on to verify no errors present:
In wp-config.local add define(‘WP_DEBUG’, true);

Commit code to feature branch:
Review code in Sourcetree and confirm which files we would like committed, then commit it to feature branch inside SourceTree.

Merge code to dev branch (submit site for QA testing on Dev)

git checkout dev
git merge feature/wp-update
git push (open source tree and only push dev branch)

**on a release branch we will use:
git merge --no-ff feature/wp-update -m “merge wp-update branch into dev”
git push (open source tree and only push dev branch)

*Submit site for QA then stop here waiting for QA approval*

If QA testing passes, then delete feature branch:
git branch –d feature/wp-update
git push --delete origin feature/wp-update (only if we pushed feature to the repo)

Create new Release Branch from dev branch:
git checkout dev
git checkout -b release/X.X.X (check repo version numbers)

Update readme file in release branch:
# Change version number in package.json and README.md files to line up with new #

Merge from release branch into Master:

*Download a copy of the live site files & DB before proceeding to next step*
git checkout master
git merge --no-ff release/X.X.X -m “merge wp-update branch into development”
git push

Tag merge into Master:

--follow semantic versioning numbers http://semver.org/. IE from 1.0.1 > 1.0.2
git tag -a 1.0.0 –m “updating from wordpress 4.8.1 to 4.8.2”
git push --tags
helpful links on git tagging:
https://git-scm.com/book/en/v2/Git-Basics-Tagging
https://gist.github.com/justinfrench/89712

Merge Release Branch into Dev:
git checkout dev
git merge --no-ff release/X.X.X -m “merge wp-update branch into development”
git push

Delete Release Branch:

git branch –d release-X.X.X
git push –delete origin release-X.X.X (only if this branch has been pushed to the repo)