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.

     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
    • Team App - Rails/Ruby
    • You should note these examples came from a previous iteration of this course, so some of the instruction was different. If you are unsure about something, err on the side of caution and use this term’s instructions or ask me.
  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
      • this uses brew bundle, which comes from https://brew.sh/
      • brew bundle installed everything from the Brewfile
    • Ruby and Rails, Team App
      • 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).

  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

  6. You must record any decisions, changes, and updates to your Stack Decisions 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?”

What is the purpose of this assignment?

This assignment helps you set up a software project in a scalable way. It is likely your first time implementing much of these aspects of a project, and it may seem tedious (it is). However, these are crucial to helping your team grow and will act like another person (catching all your bugs with tests!). You are encouraged to write tests along the way to help make sure you are not breaking your app.

We expect all CSC491/2600 students to actively participate and have thoughtful discussions. Technology lessons should be watched first in order to effectively complete this assignment.

Submission

You must create a release on your repo. This will give us a snapshot in time and allow us to grade it. See release body criteria and example below. Assignments without a coherent release body that follow the instructions in this assignment will be rejected and marked 1 day late.

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

Release Body

Release bodies must include:

Example release body demonstrating the written instructions

Questions or Concerns?

Rubric

SectionDescriptionWorth
service.ymlIs present, error-free, and fully filled out. See notes below for more details on how to validate.10.0
script/bootstrap or similarFunctions on Unix systems (Linux and/or MacOS). 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. See Notes Below25.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. If the test command is not listed in the service.yml, 0 pts will be awarded for this section. If the command fails to run before tests are executed, 0 pts will be awarded for this section.20.0
Production / BuildsApplication is available from the web (e.g. Heroku, AWS, DigitalOcean, Azure, etc), as a mobile application via Microsoft App Center, or a GitHub Release otherwise.
Exception tracking via Sentry and Logging is set up. See Notes Below
20.0
RoadmapRoadmap and Stack Decisions 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
Participation & Teamwork (Individual Grade)Effectively worked as a team member and shared equitable work load during this assignment.
Communication was regular and effective & acted in accordance with team principles.
15.0
 Total:100

Notes

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