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)

Categories
Gitflow Mac Samuel

Updating WordPress Inside A Gitflow Repo

This document is comprised of testing notes while going through the learning process of updating a wordpress site in a repo organized under the gitflow model. The steps below can be followed to update a wordpress site. This document assumes you have MAMP installed locally on your machine.

Generic Useful Commands:
Git branch (shows current branch you are on)
Git branch –a (to list out branches in the repo)
Git status (to see info on our current branch)
Git remote (to see remote branches)
Git tag (to see list of tags)
Git add . (to stage files for a commit)_

Steps Taken to Setup first Gitflow Repo & Update WordPress:

Open terminal and navigate to htdocs:

cd /

This will take us to the actual root directory. Now type:

ls

we should see the full list of folders, including application folder, now type:

cd /Applications/MAMP/htdocs

We should now be in htdocs folder.

Clone the repo

To clone the repo we need to setup git access. Create the keypair following the directions here:
https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

Then copy they key into github following the directions here:
https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

Now Clone the repo down
Navigate to the folder you would like the repo stored in (you should already be in the htdocs folder from steps 1 and 2 above).

Git clone git@github.com:user-name/git-flow-test.git

Now fetch the headers:

Git fetch
Git remote (to see remote branches)

Define who we are in the Repo:
–please note this sets the user for all projects so you will only need to do this once

git config –global user.email your-email-address@your-domain

Create Master Branch:

git checkout -b master
git status (to see if we are on master)

Create Readme.md file
Create readme.md file and put into the repo:
touch readme.md
echo “## This is a markdown readme file” >> readme.md

Complete first commit and push:

Commit this file to the repo
Git add .
Git commit –m “adding readme file”
Git push

–please note if this is your first commit you can select to use the new git 2.0 simple commit type
git config –-global push.default simple

Branch from Master to create Development branch:

git checkout -b dev master

Add old version of wordpress to development:
–please note this is only for testing purposes. In a real life situation the old version of wordpress would already be on the dev branch and we would skip to the step below and create our feature branch from dev

Download old version of wordpress from here: https://wordpress.org/download/release-archive/
Physically move wordpress files into our project folder, then run

git add .
git commit –m “adding wordpress 4.8.1”
git push

— please note on first push we will need to run:
git push –set-upstream origin dev

Branch from development to create new feature branch:

git checkout -b feature/wp-update dev
--Please note feature branches should be named "feature/wp-update" or "feature/some-other-update"

Commit Code To Feature Branch:
–Please note we need to ensure that the local environment is running the same version of php that the client’s live site is running for testing purposes. Update this version in MAMP to mirror the client’s hosting environment

Run the WP install to setup the site:
–use root for local wp site username and root for local password

Run the WP update in WP admin, then run

git add .
git commit –m “updating from wordpress 4.8.1 to 4.8.2”
git push

Merge wp-update feature branch into development branch

git checkout dev
git merge --no-ff feature/wp-update -m “merge wp-update branch into dev”
git push

Branch from dev to create Release branch

git checkout -b release dev

Delete feature Branch

git branch –d feature/wp-update
git push --delete origin feature/wp-update

Merge from release branch into Master
–please note merge from release to master requires final approval from senior dev staff & final client approval

git checkout master
git merge --no-ff release -m “merge wp-update branch into development”
git push

Tag first merge into Master with 1.0.0
–follow semantic versioning numbers http://semver.org/. In this tutorial the first release is tagged with 1.0.0. In a real life situation please note the current version and update accordingly, IIE 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

General Notes:
WordPress updates do not require database updates to be performed locally. Updating the files on the live server and visiting a few admin pages will perform the database updates on the live server. We should never make updates to a database locally and move that database live. The best possible workflow is one where code moves up and content moves down: https://pantheon.io/docs/pantheon-workflow/

When updating versions of PHP our workflow is:
-clone down site repo to local machine
-update version of php locally
-test site locally to make sure everything works
(if something breaks, create feature branch from dev & make fixes, test locally then merge to development).
-update version of php on development server
-final QA by PM
-merge code to release branch for final approval by senior dev
-update version of PHP on live
-merge code to master from release branch

When updating wordpress versions our workflow is:
-clone down site repo to local machine
-create feature branch from dev and update locally
-test locally to make sure everything works (use php version from clients live site)
-merge to development from release branch
-final QA by PM
-Merge to release branch for final approval by senior dev
-Merge to live

Random Notes:

Writing a commit message without using -m tag:

Press i to enter insert mode.
Now you can type your message, as if you were in a normal (non-modal) text editor.
Press esc to go back to command mode.
Then type :w followed by enter to save.
Finally :q followed by enter to quit.

Deleting Git Tags:

# delete local tag ‘12345’
git tag -d 12345

# delete remote tag ‘12345’
git push –delete origin tagName