Skip to content
Mo edited this page Jan 16, 2021 · 71 revisions

Lab 9

Due Date

Saturday December 5 by Midnight.

Overview

This week we are focused on software releases and getting our code into the hands of users. GitHub is great for developers, but users don't want to have to clone and build your project to run it locally. We need to provide a release that can be easily installed and run.

Much as we did with Continuous Integration, creating releases can also be automated with our git workflow. We often refer to this as Continuous Delivery (CD), which is why people often refer to CI/CD or "Continuous Integration/Continuous Delivery" systems and pipelines.

This lab will help you learn to work with and set up the following:

  • general concepts and terminology of software releases
  • git tags
  • package managers
  • user testing

For this lab you will are asked to work on your link checker project.

NOTE: this final lab provides fewer defined steps and requires more research on your part. This is partly due to the fact that different languages and platforms have different approaches and technologies (i.e., there isn't a simple answer to "how do I release my code?"), and partly as a way for me to test your skills as we wrap up our time together in the course. Remember that open source is fundamentally about community, and you can and should collaborate with your peers on a solution.

Step 1: Choose a Package and Release Method

Modern software releases rely on package managers and centralized package repositories. Each technology ecosystem has a slightly different way of doing it, but the concepts are the same:

  1. create a reproducible, automated build
  2. use some variant of semantic versioning to precisely identify and communicate the version
  3. use git and git tags to log releases in project history
  4. add "package" file(s) of some kind, identifying dependencies and which files should be included
  5. upload to a central repository for shared hosting of the release

Depending on the language and ecosystem you are using, here are some recommended approaches to creating your release:

NOTE: If you need/want to use something other than these, please speak with me to discuss your thinking. It's probably OK, but I want to help you avoid any problems.

Once you have made your choice, begin reading the docs for your chosen package format and registry.

Step 2: Implement Packaging Steps

Based on your research in step 1, begin to implement your release requirements. This may mean adding more to your build system, writing scripts, creating new files, moving existing files into a new structure, adding dependencies, etc.

As you work, keep track of everything you needed to do in order to setup the necessary requirements for your release. These steps, along with all your research and learning, should all go in your final blog post.

Step 3: Tag your Release

Refresh your memory about how git tags work. While we use branches to record our position in a moving line of development, tags allow us to fix a point in the past that we can easily revisit in the future. We want to be able to easily find the 1.0.0 version of our code, as well as the 1.0.1 version, and neither should ever change once we've made them.

Practice creating some tags. To begin, try creating an Annotated Tag for v0.9.0 (i.e. this is lab 9). Later, when you do your actual release, you can use v1.0.0.

When you are done creating tags on master you can use git push --follow-tags to push them to GitHub.

Step 4: Do a Release

Once you have your release process figured out, have setup your project to support your chosen package registry, and understand how to tag, it's time to do a release.

Create a v1.0.0 release of your project, and submit it to your chosen package registry. If you make a mistake, don't panic! Simply fix your mistake and do another release using a PATCH update (e.g., v1.0.1).

Do as many releases as you need to get this right.

Step 5: Update Your Docs

Now that your software can be used via a package registry, you need to update your README.md file to give full instructions on using your code. Re-read your README.md and update all the information about how to download and install your project from a user's perspective.

To do this, try setting up a new project that uses your code via the package registry. Make sure you are able to get it working locally using your instructions.

Once you are done, commit and push these changes to your origin.

Step 6: User Testing

Now it's time to see what happens when someone else tries to install and use your code via the package registry. Find someone who is willing to test your project. It can be someone in the course, or a friend not taking this course. I would recommend that you choose a fellow developer, though, so you don't have to explain the basics of using your chosen programming language, tools, or ecosystem.

Setup a call with your friend over MS Teams, Zoom, or some other communication platform and get them to share their screen with you. Now point them at your README.md file. Ask them to read the instructions and try to follow what they say. Also, ask them to narrate what they are doing as they do it so that you can take notes. Their goal is to use your project on their machine.

NOTE: try to observe but not guide them beyond what your README says. If the README is unclear, you can help them, but make notes about problems they encountered and corrections you need to make.

When they are done, ask them for feedback about the process and any things that they found difficult or missing. Make notes so you can update your README.

Step 7. Update Developer Docs to Include User Testing Feedback

Based on the feedback you got in the previous step, update your README so that it includes the necessary information a user would need to install and use your project. You may also find that you need to update your release to include files, dependencies, or otherwise modify what a user installs.

When you have updated your README, push it to GitHub.

Step 8. (Optional) Automate your Release Process with GitHub Actions

Just as you did with automating your tests, you can also automate your release process via GitHub Actions. Depending on your chosen package registry, research and implement the steps necessary to automate a new release whenever you push a new tag to your master branch.

Step 9: Write a Blog Post

When you have completed all of the required steps above, please write a detailed blog post. In your post, discuss the following:

  • Which release tool and package registry did you choose? Provide links to everything you mention.
  • What was the process for creating a release? Be detailed so that other developers could read your blog and get some idea how to do the same.
  • What did you learn while doing your release? Did you have any "aha!" moments or get stuck?
  • How much did you have to alter your code, files, build, etc. to use the chosen package format and registry?
  • How did the User Testing session with your partner go? Describe what it was like, where they got stuck, and how you corrected the problems.
  • How do users install and use your project now that it has been released? Provide links and some instructions.

Submission

When you have completed all the requirements above, please add your details to the table below.

Name Blog Post (URL) Your Release on the Package Registry (URL)
Chris Pinkney https://dev.to/chrispinkney/help-there-s-a-snake-in-my-pipeline-2mp4 https://pypi.org/project/He-s-Dead-Jim/
Tim Roberts https://dps909tddr.tech.blog/lab-9-releasing-version-1-0-and-beyond/ https://pypi.org/project/Check-That-Link/
Joseph (joey) Assal https://osd600-joey-assal.blogspot.com/2020/12/osd600-lab-10.html https://www.npmjs.com/package/jassal-link-checker
Khoi Nguyen Vu (Tony) https://tonyknvu.medium.com/i-love-go-a-lot-but-maybe-not-their-documentation-the-struggle-is-real-aa2af21c6af9 https://pkg.go.dev/github.com/tonyvugithub/GoURLsCheckerCLI
Jasper Mui https://muioverflow.wordpress.com/2020/12/01/npm-me-check-link/ https://www.npmjs.com/package/@jasper-mui/me-check-link
Hyunji Lee https://hyunjijanelee.blogspot.com/2020/12/lab9-publish-link-checker-tool.html https://www.npmjs.com/package/hyunji-link-checker
Sanjida Afrin https://safrin2.medium.com/release-find-broken-link-9dd8f4f4011d https://www.npmjs.com/package/findbrokenurl
Zong Jin Jiang https://zjjiang2.blogspot.com/2020/12/lab-9-blog.html https://www.npmjs.com/package/project-checkurl
Minh Huy Nguyen https://x7z.net/lab09 https://www.npmjs.com/package/insane-cli
Roger Yu https://ryudeveloper.wordpress.com/2020/12/02/lab-9-package-release/ https://pypi.org/project/cligon/#description
Wei Huang https://weihuangosd.blogspot.com/2020/12/updating-dlcheck-release.html https://www.npmjs.com/package/dlcheck
Leon Li https://gonewiththewind1982.blogspot.com/2020/12/publish-project-in-lab-9.html https://www.npmjs.com/package/link-checker-lixiaoqi
Abdulbasid Guled https://dev.to/hyperthd/lab-9-now-the-world-can-automate-status-codes-136p https://pypi.org/project/UrlAutomationMachine/
Mohammed Niaz Ul Haque https://dev.to/niazulhaque/done-with-labs-now-last-left-exams-week-is-here-too-much-but-it-s-ok-3353 https://www.npmjs.com/package/nlinks
Junyong Liu https://jliu396.blogspot.com/2020/12/osd600-lab9.html https://www.npmjs.com/package/urlstatuschecker
Michael Brackett https://dev.to/mljbrackett/lap-9-osd600-35f0 https://pypi.org/project/linkcheck-pkg-MLJBrackett/
Ekaterina Grinberg https://egrinberg.medium.com/lab-9-dps909-c154b144943b https://www.npmjs.com/package/urltest-2
Stella Jung https://sostellajung.blogspot.com/2020/12/finally-release-my-first-open-source.html https://www.npmjs.com/package/http-checker
Thomas-Jayrell LeBlanc https://tjstavern24697521.wordpress.com/2020/12/04/lab-9-deadlinkz-finally-releases/ https://pypi.org/project/deadlinkz/
Muskan Shinh https://muskanshinh.wordpress.com/2020/12/06/lab-9/ https://www.npmjs.com/package/urltester2
Mintae Kim https://mintaedotblog.wordpress.com/2020/12/05/lab9-release-package/ https://pypi.org/project/Dead-Link-Checker
Ruby Anne Bautista https://medium.com/@rabautista/packaging-and-sending-it-off-807a182d3d11 https://pypi.org/project/linkreaper/
Matthew Stewardson https://matthew-k-stewardson.blogspot.com/2020/12/week-11-lab-9-releasing-linkstatus.html https://pkg.go.dev/github.com/MSTEWARDSON/LinkStatus)
Philip Golovin https://1jz.tech.blog/2020/12/05/releasing-a-package/ https://pkg.go.dev/github.com/1jz/WISA
Jie Yang https://jyangblogs.wordpress.com/2020/12/05/deploy-a-java-application/ https://search.maven.org/artifact/com.github.jossiey/LinkChecker-CmdLC/1.0/jar
Badal Sarkar https://badalsarkar.ca/blog-opensource/opensource/releasing-blink-to-the-maven-central/ https://search.maven.org/artifact/ca.badalsarkar/blink
Jennifer Croft https://dev.to/strawberries73/osd600-lab-9-the-last-one-22pa https://www.npmjs.com/package/jenn-brokenlink
Mamadou Diallo https://mamadou--diallo.blogspot.com/2020/12/lab-9.html https://search.maven.org/artifact/com.github.mamadou-diallo/HTML-Link-Reviewer-/1.0.0/jar
kimin lee https://dev.to/klee214/the-last-lab-git-tagging-and-publishing-to-npm-310j https://www.npmjs.com/package/kimin-url-checker
Raymond Rambo https://dev.to/fluentinstroll/creating-the-first-release-and-link-checker-1-0-30o3 https://www.npmjs.com/package/l-checker
Henry Nguyen https://dev.to/henryzerocool/release-cli-tool-python-package-ghm https://pypi.org/project/henzcli/
Zongwei Yang https://dev.to/yzwdroid/release-go-package-4p34 https://pkg.go.dev/github.com/yzwdroid/goURL
Thanh Tien Phat Nguyen https://dev.to/phast184/publish-your-first-package-on-npm-6p https://www.npmjs.com/package/link-checker-tool
Eunbee Kim https://ekim105.wordpress.com/2020/12/05/deploy-git-tag -
Joel Azwar https://joelazwaros.blogspot.com/2020/12/linkchek-100.html https://www.npmjs.com/package/link-chek
Palak Chawla https://palak-chawla.blogspot.com/2020/12/lab-9-last-chronicle.html https://www.npmjs.com/package/urls-inspector
Pedro Fonseca https://medium.com/@pedrofonsecadev/node-package-manager-and-tags-ff39a1f0410f https://www.npmjs.com/package/urlpilgrim
Devansh Shah https://dev.to/zg3d/firelinker-semantic-release-2m28 https://www.npmjs.com/package/firelinker
Xiaolu Liu https://dev.to/isabellaliu77/lab-9-4og3 https://pkg.go.dev/github.com/isabellaliu77/urlChecker
Royce Ayroso-Ong https://roycedev.medium.com/publishing-to-pypi-4c23ac015226 https://test.pypi.org/project/haystack-rjayroso/
Abu Zayed Kazi https://www.abuzayed.ca/my-blog/osd600/2020/12/08/lab-9-publishing/ https://www.nuget.org/packages/AZ.CheckLinkCLI2/1.0.0
Abdul Abdi https://abdulosd.blogspot.com/2020/12/packaging.html https://pypi.org/project/DeadOrNot/
Yuan-Hsi Lee https://dev.to/yuanleemidori/packaging-and-releasing-c-console-application-1fnd https://www.nuget.org/packages/OSD600.GoodLinkOrBadLink/
Mohammed Ahmed (Mo) https://moho472.medium.com/lab-9-pip-e7acdc4801e9 https://test.pypi.org/project/release0-1/0.1/