Assignment 5 - Dev Env, Test Infrastructure, & Production Setup

This assignment aims to get you set up with best practices in which to build your software. Below are high level goals, followed by in detail requirements.



Initial Requirements

  1. You have created a service.yml file in the top directory of your repo. This will help us, and others, see everything available to run and use in your repo.

    ```yaml tools: exceptions: https://... logging: https://... ci: https://... services: production: https://... production_dashboard: https:// staging: ... docs: getting_started: https://... commands: bootstrap: script/bootstrap database: create: bin/rails db:create migrate: bin/rails db:migrate server: bin/rails server ``` This should serve as an example. These kinds of files can help you debug, record links to docs, services, tools, and more. While this is less useful with one app, in an organization with many apps this can be crucial to remembering and finding information.

    Examples:

    - [F2019 Team Klutch - Javascript](https://github.com/dcsil/klutch/blob/master/app/service.yml) - [Team App - Rails/Ruby](https://github.com/dcsil/team_app/blob/master/service.yml)
  2. You have a script/bootstrap script, bin/bootstrap script, or similar, available and able to be run on Unix systems (Sorry Windows Users).
    • This should install dependencies if needed like Postgres, MySQL, Redis, etc
    • This should install any languages required
    • This should install any packages like Rubygems, Node Packages, etc
    • Docker Compose or Docker is ok to use
    Write a script named `script/bootstrap`, it should setup much of your system for you. It is fine if the script targets one operating system (mac, linux, or windows). Make note of this script in the README of your app. If you have a getting started guide, this can be in there but you should make sure that that guide is mentioned in the README. Docker and Docker Compose is a good option here

    Examples:

    - [Javascript and Node](https://github.com/integrations/jira/blob/master/script/bootstrap) - this uses `brew bundle`, which comes from https://brew.sh/ - `brew bundle` installed everything from the [`Brewfile`](https://github.com/integrations/jira/blob/master/Brewfile) - [Ruby and Rails, Team App](https://github.com/dcsil/team_app/blob/master/bin/bootstrap) - this uses some custom install scripts to try and minimally impact the system - it installs all languages, dependencies, and databases that it needs - then it creates and migrates the database so it's ready to use
  3. You have a test infrastructure set up and listed in your service.yml. You should be able to run exactly what you list in your service.yml file to run your tests. It is ok if you only test a hello world app for now.
  4. You have CI setup to run your tests from (3).

    I recommend [GitHub Actions CI](https://help.github.com/en/actions/automating-your-workflow-with-github-actions).

    Examples:

    - [Javascript example for GitHub Actions CI](https://github.com/integrations/jira/pull/295) - [Node example for GitHub Actions CI](https://github.com/dcsil/klutch/blob/master/.github/workflows/nodejs.yml) - [Ionic example for GitHub Actions CI](https://github.com/dcsil/klutch/blob/master/.github/workflows/ionic.yml) - [Ruby example for GitHub Actions CI](https://github.com/dcsil/team_app/blob/master/.github/workflows/ruby.yml)
  5. You must have your app available online (if a web app) via a public URL. If you are not making a web app, you must have your app available via a compiled artifact in a GitHub Release for the teaching staff to install. We should not have to do anything than open the install file.

    You can deploy to Heroku really easily with Ruby, Javascript, Python, Go, PHP, and other languages. - You only need the hobby dyno - I would recommend Postgres as there is a free hobby database you can use - This is not good to host your machine learning experiments - It is included in your [GitHub Student Pack](https://education.github.com/pack) - [DigitalOcean](https://digitalocean.com), [Amazon AWS](https://aws.amazon.com/), and [Microsoft Azure](https://azure.microsoft.com/en-us/) are other options and also included
  6. You must record any decisions, changes, and updates to your StackShare Stack and update your Architecture diagram from A3. Include a paragraph in your Release submission outlining the changes to your roadmap, including (high level) what you have completed. Answer “are you on schedule?”

Submission

You must create a release on your repo. This will give us a snapshot in time and allow us to grade it.

Assignments are always due at 11:59:59pm Eastern Time.

Second, you must submit the release on the LearnSoftware application. You can find the submission location here: https://learnsoftware.engineering/my_assignments

The release does not need to include pull requests or commits from every member. Please include the path location of the assignment within the release body.

It is suggested to use a folder and multiple files, just like this CSC491 repo, to contain this assignment.

Questions or Concerns?

Rubric

SectionDescriptionWorth
service.ymlIs present and fully filled out10.0
script/bootstrap or similarFunctions fully on Unix systems. Application is fully ready to run after running the script (dependencies installed, database install and setup, etc). The only exception is when you need to get credentials for something like a 3rd party API, that can be a different step.30.0
Testing and CI setupTest harness works and can be run from a single command listed in the service.yml file. CI is running and is passing.25.0
Production / BuildsApplication is available from the web, as a mobile application via Microsoft App Center, or a GitHub Release otherwise.
Exception tracking via Sentry and Logging is set up.
25.0
RoadmapRoadmap and Stackshare.io are updated with any new decisions and/or changes. Paragraph included in release covers progress and answers questions (-100% on this section if not included).10.0
 Total:100

Rating Scale

This scale is used for each line of the rubric above.

RatingResult
Outstanding, Thoughtful and thorough100% of pts
Strong, Provides some thought80% of pts
Acceptable, Simple explanation60% of pts
Insufficient, Little effort was made to give explanations40% of pts
Unacceptable, No effort was made or the section was missing0% of pts