Git Workflow Guide

 

# 0a. Fork the repo.
git-workflow-guide 0a.i git-workflow-guide 0a.ii
# 0b. Clone the repo.

git-workflow-guide 0b


Joe:projects joeflack4$ git clone https://github.com/joeflack4/commcare-hq.git
Cloning into 'commcare-hq'...
remote: Counting objects: 846675, done.
remote: Compressing objects: 100% (149/149), done.
remote: Total 846675 (delta 104), reused 109 (delta 50), pack-reused 846472
Receiving objects: 100% (846675/846675), 415.87 MiB | 6.85 MiB/s, done.
Resolving deltas: 100% (627831/627831), done.
Checking out files: 100% (7490/7490), done.

# 0c. Make a virtual environment. I use virtualenvwrapper.

Joe:projects joeflack4$ mkvirtualenv commcare-hq
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/joeflack4/virtualenvs/commcare-hq/bin/python3
Also creating executable in /Users/joeflack4/virtualenvs/commcare-hq/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/joeflack4/virtualenvs/commcare-hq/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/joeflack4/virtualenvs/commcare-hq/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/joeflack4/virtualenvs/commcare-hq/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/joeflack4/virtualenvs/commcare-hq/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/joeflack4/virtualenvs/commcare-hq/bin/get_env_details

# 0d. Activate your virtual environment.
# Using virtualenvwrapper, this is done like so:

Joe:commcare-hq joeflack4$ workon commcare-hq
(commcare-hq) Joe:commcare-hq joeflack4$
# 0e. Change directory to the repo.
(commcare-hq) Joe:projects joeflack4$ pwd
/Users/joeflack4/projects
(commcare-hq) Joe:projects joeflack4$ cd commcare-hq/
(commcare-hq) Joe:commcare-hq joeflack4$ pwd
/Users/joeflack4/projects/commcare-hq
(commcare-hq) Joe:commcare-hq joeflack4$ ls
CONTRIBUTING.rst app_builder_live_test docs locale settings.py
# ...and so on.

# 0f. Set up remote to trunk.

(commcare-hq) Joe:commcare-hq joeflack4$ git remote -v
origin https://github.com/joeflack4/commcare-hq.git (fetch)
origin https://github.com/joeflack4/commcare-hq.git (push)

git-workflow-guide 0f


(commcare-hq) Joe:commcare-hq joeflack4$ git remote add trunk https://github.com/dimagi/commcare-hq.git
(commcare-hq) Joe:commcare-hq joeflack4$ git remote -v
origin https://github.com/joeflack4/commcare-hq.git (fetch)
origin https://github.com/joeflack4/commcare-hq.git (push)
trunk https://github.com/dimagi/commcare-hq.git (fetch)
trunk https://github.com/dimagi/commcare-hq.git (push)

# 1. You have a change you want to make.

# 2. You checkout a new branch based from the develop branch of the trunk repo.

(commcare-hq) Joe:commcare-hq joeflack4$ git branch
* develop
master
(commcare-hq) Joe:commcare-hq joeflack4$ git checkout -b my-new-feature-branch
Switched to a new branch 'my-new-feature-branch'
(commcare-hq) Joe:commcare-hq joeflack4$ git branch
develop
master
* my-new-feature-branch

# 3. You work, adding commits to this “feature branch” (even if what you’re doing is not adding/updating a specific feature).
# I made some changes to the .gitignore.

(commcare-hq) Joe:commcare-hq joeflack4$ git status
On branch my-new-feature-branch
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: .gitignore

no changes added to commit (use "git add" and/or "git commit -a")
(commcare-hq) Joe:commcare-hq joeflack4$ git add .
(commcare-hq) Joe:commcare-hq joeflack4$ git commit -m "Updated gitignore."
[my-new-feature-branch d0b7774] Updated gitignore.
1 file changed, 1 insertion(+)

# Might as well push changes to Github while I”m at it.


(commcare-hq) Joe:commcare-hq joeflack4$ git push
fatal: The current branch my-new-feature-branch has no upstream branch.
To push the current branch and set the remote as upstream, use

git push --set-upstream origin my-new-feature-branch

# Woops! Forgot to set an upstream branch on Github.


(commcare-hq) Joe:commcare-hq joeflack4$ git push --set-upstream origin my-new-feature-branch
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/joeflack4/commcare-hq.git
* [new branch] my-new-feature-branch -> my-new-feature-branch
Branch my-new-feature-branch set up to track remote branch my-new-feature-branch from origin.

# 4. When ready, make a pull request to the develop branch of the trunk repo.

(commcare-hq) Joe:commcare-hq joeflack4$ git home

# Doing ‘git home’ opens git in the browser.

git-workflow-guide 4a

git-workflow-guide 4b

# 5. The pull request is reviewed, some code review / change requests may be provided, and ultimately once the review is passed, the merge is accepted into develop.

# 6. If no testing is needed, skip to step 9. If testing is needed, continue with this step: When ready to deploy changes for testing, the staging branch merges changes from the develop branch.

# 7. Staging branch is pushed to staging instance.

# 8. Testing is done on the staging instance.

# 9. When testing on staging is complete, develop is merged into the master or production branch.

# 10. Master or production branch is pushed to the production instance.

# 11. Testing is done on the production instance.

# 12. When testing on production is complete, the workflow is finished. Your change has been implemented!

Check out the new .pdf User Guide! – http://www.joeflack.net/justadash/user-guide

Just-a-Dash User Guide

Just-a-Dash ERP Dashboard

Just-a-Dash

Just-a-Dash ERP Dashboard Just-a-Dash application is a light-weight, mobile friendly, scaffolded EMS (Enterprise Management System) platform. For our purposes, EMS is synonymous with the more common term ‘ERP’ (Enterprise Resource Planning).

Architecture

Just-a-Dash uses a highly modular SOA (Service Oriented Architecture) on both the front and back ends. The technology stack is as follows,

Documentation

As of right now, no user or development documentation exists. But it will.

Contributing

Contribution is encouraged. While Just-a-Dash’s documentation is currently sparse, it is however straightforward and easy to learn, and the technologies it is built on are robust and well documented. Feel free to reach out to me, and I will assist in any way possible.

  • Data Storage: Your choice of RDBMS.
  • Server Languages/Frameworks: Python, with MVC in Flask.
  • Client Languages/Frameworks: HTML/CSS/JS, with UI in Bootstrap, themed with AdminLTE.

Installation

Local Installation

The recommended method is virtualenv, with pip. The included requirements.txt lists dependencies, and is used by virtualenv, and Heroku (if deploying online) for installation of these dependencies. I highly recommend The Flask Mega Tutorial , Part I (& onwards) of which can be used as a guide for installation of this application.

Online Deployment

I recommend Heroku as a PaaS. If using Heroku, it will utilize the included requirements.txt file and Procfile to build and run your application.

EMS Modules

Released Modules

Currently none.

Modules in Development

  • HRM (Human Resources Management System)
  • OMS (Operations Management System)
  • DES (Data Extrapolation System)
  • CRM (Customer Relationship Management)
  • BMS (Billing Management System)
  • Interface for External AMS (Accounting Management Systems)

Screenshots

Mobile Alpha 01

IceHRM – Home Health Edition

IceHRM – Home Health Edition

IceHrmHhe_Alpha01-337x600

Live Demo

Demo User: admin / Demo PW: admin

Documentation

Blog

Project on Github

SCC File Renamer

SCC File Renamer

SCC-File-Renamer

About

SCC File Renamer is a script that will flip the order of 2 strings within the filenames of a batch of files, so long as the filenames are of the following syntax:

MainString1 #### MainString2 – SuffixString

Applications for Usage

I use this script at work on a weekly basis, for the purpose of keeping a sorting timesheets in order by either client/project or employee. Below is an example of an application of this filename syntax that is typically used in my current workplace, as well as how the filename would be converted.

ProjectA MMDD EmployeeD – Notes yada yada

->

EmployeeD MMDD ProjectA – Notes yada yada

This is very useful for renaming a large number of such files at once.

Common Issues

  • Windows does not allow Powershell scripts to be run by default, for security reasons. If you haven’t already, make sure to enable running of PS scripts.
  • Make sure that there are no spaces in the path with which you run the file from.

How to Use

Two files are included, but they do the same thing. The only difference is that one runs with user prompts, and the other executes automatically.

Non-Windows Operating Systems

There do exist means with which to run Powershell scripts on non-Windows operating systems. Unfortunately I do not know the details, so I would be unable to support any such issues ;(.

Windows

The script is written in Powershell. Windows 7 and later versions come with Powershell installed, but for prior versions of Windows, you will need to install it first.

First, you should clone this repository. Then you will need load powershell first and run the script manually. Optionally and even better, you can set your system’s .ps1 files to open with Powershell by default. Doing this will allow you to run by double clicking.

Some sample files have been included. Feel free to run the script on these files to see it in action!

the thoughtblog of Joseph E. Flack IV