Managing Local Heroku Deployments2019-03-11 - 2 mins read
Recently I have using Heroku a fair bit on a hobby project I am working on and having a hard time getting comfortable with local deployments. As my project is starting to get a little more complex and actually useful I am wanting to make sure what I have deployed is something that works. Further to it I have a back end deployed separately from the front end application so I want to make sure they are in sync.
All of this lands me at a point where I would love to build in a proper CI/CD pipeline for these projects, however I struggle to bring myself to it as I am lazy and couldn't find a short solution in the first 3.5 seconds :stuck_out_tongue_closed_eyes:. So I went for the next best thing, an over-engineered script that gives me some certainty in what I am releasing. This is what I wanted to share so hopefully someone who gets into the same position as myself has something pre-made for them.
#!/usr/bin/env bash set -e echo "Last release:" cat .last-release echo stats=$(git status --porcelain) if [[ -z $stats ]]; then echo "Hit enter to continue with the release" read else echo "Workspace is dirty, stash or commit before release!" exit 1 fi ./ci.sh git push heroku master git log -n 1 > .last-release git commit -a -m "$(heroku releases -n 1)" git push
It isn't by any means a replacement for a proper pipeline but it helped me feel better about my releases.
Essentially all it is doing is ensuring that:
- You only release with a clean workspace. All changes you are running locally are deployed
- You can see what was last released by tracking the file
- A commit is only deployed if it passes the
ci.shscript which for me usually contains running tests and linter
- A commit is also made containing the Heroku version that has been deployed
Hope you may find this useful. Any ideas or improvements let me know!