diff --git a/.github/workflows/assignment-statistics.yml b/.github/workflows/assignment-statistics.yml new file mode 100644 index 0000000000..4b92011173 --- /dev/null +++ b/.github/workflows/assignment-statistics.yml @@ -0,0 +1,49 @@ +# This is a basic workflow to help you get started with Actions + +name: Statistic Information for Each Assignment Category + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the 2021 branch + push: + branches: + - "2021" + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + count-assignments: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Setup Python + - name: Setup Python + uses: actions/setup-python@v2.2.1 + with: + python-version: '3.x' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + if [ -f ./tools/requirements.txt ]; then pip install -r ./tools/requirements.txt; fi + + # Set timezone to Europe/Stockholm + - name: Set timezone + run: sudo timedatectl set-timezone Europe/Stockholm + + # Runs a single command using the runners shell + - name: Update the statistic issue + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO_FULLNAME: ${{ github.repository }} + CONTRIBUTIONS_PATH: ${{ secrets.ASSIGNMENT_STAT_CONTRIBUTIONS_PATH }} + ISSUE_NUMBER: ${{ secrets.ASSIGNMENT_STAT_ISSUE_NUMBER }} + run: python ./tools/stat_submissions.py -p $CONTRIBUTIONS_PATH --printInMarkdown --printStudentStat --publish diff --git a/README.md b/README.md index 084363e2cf..2b71cd3226 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,9 @@ The schedule is at * [How to survive the KTH DevOps course](https://docs.google.com/presentation/d/1SxHftBTBefN8jA6nVhlgKFP6BypdyV3Q_Gh1R8IwWK4/edit?usp=sharing) * Goals: watch the repo, find a first teammate, register one first task as a pull request on this repo. -### Week 2 +### Week 2 * Technical Briefing (B. Baudry) + * Preparatory material [Testing at scale](https://increment.com/testing/testing-at-scale/) * Guest Lecture: Continuous Integration [Mats Skoglund (Scania)](https://www.linkedin.com/in/matsskoglund/). * Student presentations diff --git a/contributions/course-automation/amarh-ntas/README.md b/contributions/course-automation/amarh-ntas/README.md new file mode 100644 index 0000000000..f7f8e05838 --- /dev/null +++ b/contributions/course-automation/amarh-ntas/README.md @@ -0,0 +1,21 @@ +# Course automation: Essay bibliography check & summary +## Members +Amar Hodzic (amarh@kth.se) + +Natan Teferi Assegehegn (ntas@kth.se) +## Proposal +We would like to create a Github Action that produces a PR comment with the number of references used as well as an excerpt from the reference list. This would simplify the TAs job in getting an overview without having to open the file and scroll down. +We are aware of another proposal that summarises essays but it has no mention of references. + +What the Action should do: +* When a PR uses a specific label (e.g. essay), create a comment on that PR +* The comment should have a reference count +* The comment should include the reference list +* The reference list should be stripped down based on verbosity level set in the code (e.g. remove "accessed date", URL etc) + +Criterias it should fulfill: +* Done before April 6 +* The task produces a PR comment +* The task runs on a standard platform (Github Action) +* The task is praised by the other students of this course +* The code for the task is available and well documented \ No newline at end of file diff --git a/contributions/course-automation/isacarvid-aatif/README.md b/contributions/course-automation/isacarvid-aatif/README.md new file mode 100644 index 0000000000..e41014b455 --- /dev/null +++ b/contributions/course-automation/isacarvid-aatif/README.md @@ -0,0 +1,23 @@ + +# Course automation: Email notification for proposal-PR new comments + +## Members +Ayub Atif (aatif@kth.se) +GitHub: [ayubatif](https://github.com/ayubatif) + +Isac Arvidsson (isacarv@kth.se) +Github: [isacarvid](https://github.com/isacarvid) + +## Proposal + +We want to send a notification via email to all PR group members when a new comment on a proposal-PR has been made. The problem arises as only the author of the PR would receive a notification normally, leaving the other members without knowledge of needed changes. Thereby providing an improvment to the course automation experience. + +The requirements for the actions are: + +- When a proposal-PR is commented it triggers github actions. +- Parse README.md to find all members. +- Include title of PR. +- Include the new comment. +- Send email to all group members. + +Note: The student can set on/off the notification (it will be off by default). This way, students who don't want to be notified are not going to receive email alerts. diff --git a/contributions/course-automation/kallem-manande/README.md b/contributions/course-automation/kallem-manande/README.md new file mode 100644 index 0000000000..be790d9373 --- /dev/null +++ b/contributions/course-automation/kallem-manande/README.md @@ -0,0 +1,12 @@ +# course-automation: automatic labels + +## Members + +Kalle Meurman (kallem@kth.se) +GitHub: [Kalle](https://github.com/Wizkas0) + +Måns Andersson (manande@kth.se) +GitHub: [Måns](https://github.com/mansand1) + +## Proposal +Action that automatically adds labels to issues, pull-requests, etc. based on keywords in message. diff --git a/contributions/course-automation/kalpet-andnil5/README.md b/contributions/course-automation/kalpet-andnil5/README.md new file mode 100644 index 0000000000..826435daf8 --- /dev/null +++ b/contributions/course-automation/kalpet-andnil5/README.md @@ -0,0 +1,22 @@ +# Course automation proposal: Verify PR submitted have Github id's and KTH ids matching students registered to the course + + ## Members + + Kalle Pettersson (kalpet@kth.se) + GitHub: [KallePettersson](https://github.com/KallePettersson) + + Anders Nillson (andnil5@kth.se) + GitHub: [andnil5](https://github.com/andnil5) + + ## Proposal +We want to solve the issue described by baudry in #916. +"Check that all PR submitted for the course come from a Github id that corresponds to one KTH id of a student who registered for the course" + + ## Proposed solution: + +* Create a GitHub javascript action to be run on each PR. +* Extract the GitHub id of the PR author. +* Create a list of valid kth ids (from students registered to course). +* If GitHub id matches kth id, approve PR. +* Otherwise, check that the Member mail address in the README match. +* Utilize Status checks API to visualize the result. \ No newline at end of file diff --git a/contributions/course-automation/kultala-borzi/README.md b/contributions/course-automation/kultala-borzi/README.md new file mode 100644 index 0000000000..1b7e6645ae --- /dev/null +++ b/contributions/course-automation/kultala-borzi/README.md @@ -0,0 +1,29 @@ + +# Course Automation Proposal: Checking legal group composition + +## Members: + Henrik Kultala (kultala@kth.se) + GitHub: [hengque](https://github.com/hengque) + + Eleonora Borzi (borzi@kth.se) + GitHub: [EleonoraBorzis](https://github.com/EleonoraBorzis) + + +## Group rules for this course: +- Max 3 persons in a group + +- You cannot be with the same persons for more than 2 projects. + +- You can work alone on one or at most two projects. + +- When you send a pull request for registration, please follow the name convention of using the email addresses of two members to create the folder: email-email. + - This is assumed to be the same email addresses as specified in the readme. + + - This is also assumed to mean “all members of the group” and not “two members”; i.e. if there are three members then all three mbemers’ email address should be included in the folder name. + +## Proposal +When a new project is proposed, the readme and the folder name are checked for the names of the group members. The group validity is checked against the rules stated above and a comment with the results is posted on the PR. It also checks that the name of the folder is correct in relation to the email addresses in the readme. + +## Tools: +Github Actions +Bonus: Status Check on GitHub diff --git a/contributions/course-automation/lerjevik-renstr/README.md b/contributions/course-automation/lerjevik-renstr/README.md new file mode 100644 index 0000000000..e248fb8868 --- /dev/null +++ b/contributions/course-automation/lerjevik-renstr/README.md @@ -0,0 +1,25 @@ +# Course Automation: Upvote other students’ work + +## Members +- [Dina Lerjevik](https://github.com/dmariel) (lerjevik@kth.se) +- [Anders Renström](https://github.com/Renstrom) (renstr@kth.se) + +## Proposal + +We would like to integrate a functionality that enables students to upvote other students' work. This would facilitate for students to fulfill the criteria: "The task is praised by the other students of this course", which is currently one of the criteria for "Course Automation". + +The action should perform the following: + +* When a specific label is included in a PR, create a comment on an issue with details from the Course Automation-folder (README-title and URL to project repository). +* A comment is added to the PR when a comment has been added to the issue. A link to the issue-comment is included. +* This enables people to upvote projects, by interting :thumbsup: on the comments. +* The upvotes are collected and visualized in a table, in the form of a “Top-list”. + +We aim to fulfill the following criteria: + +* Deadline before April 6, 2021 (in order to be useful for the course) +* The automation task produces a PR status or issue / PR comment and points to a generated page with valuable additional information +* The automation task is reusable in other courses +* The task runs on a standard platform (GitHub Action) +* The task is praised by the other students of this course +* The code for the task is available and the repo is well documented \ No newline at end of file diff --git a/contributions/course-automation/siper/README.md b/contributions/course-automation/siper/README.md new file mode 100644 index 0000000000..fb4506830a --- /dev/null +++ b/contributions/course-automation/siper/README.md @@ -0,0 +1,18 @@ +# Course automation: Automatic validation and labeling + +## Members + +Simon Persson (siper@kth.se) +GitHub: altaired + + +## Proposal + +I plan to make a github action that automatially asigns labels depending on the category of the proposal and a "proposal" label (if it is a new proposal). The action should also validate the folder naming structure and that a README file is included properly. This would allow the TA's to easily filter out what PR:s to check. + +In order to achive this, the following will have to be done: +* Validate the folder structure and README on each push +* Check on each PR what file / files has been modified, to determine what category the PR is related to. Also check if files that should't have been modified are included and if that's the case, return an error to the user. +* Assign the appropriate labels +* Report back the status if the PR is following the required structure. +* Create a report showing statistics over the number of proposals. diff --git a/contributions/course-automation/zangis/README.md b/contributions/course-automation/zangis/README.md new file mode 100644 index 0000000000..c1b0e3d991 --- /dev/null +++ b/contributions/course-automation/zangis/README.md @@ -0,0 +1,15 @@ +# Course automation: Verify pull request content changes + +## Members + +Ralfs Zangis (zangis@kth.se) +GitHub: [Ralfs](https://github.com/bubriks) + +## Proposal +Ensuring that pull request can be approved only if the formatting requirements are met. + +## Description +- Check changed .md file contents (contains: task name, members, and description) +- Verify that the member names (from README.md) are represented in the containing folder name +- Confirm that file structure follows the rules (no changes outside members folder in the selected category) +- Disallow pull request approval if any checks have failed \ No newline at end of file diff --git a/contributions/demo/README.md b/contributions/demo/README.md index e69de29bb2..a2123718a5 100644 --- a/contributions/demo/README.md +++ b/contributions/demo/README.md @@ -0,0 +1,2 @@ +## Please see the grading criteria for live demo [here](https://github.com/KTH/devops-course/blob/2021/grading-criteria.md) + diff --git a/contributions/demo/arieltan-zangis/README.md b/contributions/demo/arieltan-zangis/README.md new file mode 100644 index 0000000000..e48d653c44 --- /dev/null +++ b/contributions/demo/arieltan-zangis/README.md @@ -0,0 +1,18 @@ +# Video demo proposal: Beginners guide on automated backups in azure + +## Members + +Justin Arieltan (arieltan@kth.se) +GitHub: [Justin](https://github.com/Agriad) + +Ralfs Zangis (zangis@kth.se) +GitHub: [Ralfs](https://github.com/bubriks) + +## Proposal +Creating an easy to follow guide on why/how to use backups. + +- Why backups are important +- 3 2 1 backup strategy +- Setting up azure +- Establishing automated backup for SQL database +- Showcasing results diff --git a/contributions/demo/aronber/README.md b/contributions/demo/aronber/README.md new file mode 100644 index 0000000000..693f65fad6 --- /dev/null +++ b/contributions/demo/aronber/README.md @@ -0,0 +1,13 @@ +# Designing integration tests with cypress + +## Members + +Aron Hansen Berggren (aronber@kth.se) GitHub [arxra](https://github.com/arxra) + +## Agenda + +Setting up cypress goes in 20 seconds and is not particularly interesting. +The Cpress dashboard allows to visuallyze the tests running in parallel. +This requires some extra thought while designing your tests, but provides you with massive improvments. +I feel like a video will get across how to do these things while keeping the attention of the fellow students, +and others who find the video across the internets. diff --git a/contributions/demo/damne-fwallb/Readme.md b/contributions/demo/damne-fwallb/Readme.md new file mode 100644 index 0000000000..8b10bb1dfe --- /dev/null +++ b/contributions/demo/damne-fwallb/Readme.md @@ -0,0 +1,14 @@ +# How to add code coverage report on Github using Clover and GitHub Action + +### Contributors: + +Sara Damne - [damne@kth.se](damne@kth.se) - [@damne](https://github.com/damnePers) + +Frida Wallberg - [fwallb@kth.se](fwallb@kth.se) - [@fwallb](https://github.com/fwallb) + +### Description + +The demo will show: +- how to setup code coverage measuring on repo using Clover +- output results in a report +- adding badge, displaying coverage percentage, to Github repo using Github Actions diff --git a/contributions/demo/despinoy-gdba/README.md b/contributions/demo/despinoy-gdba/README.md new file mode 100755 index 0000000000..cce726fa78 --- /dev/null +++ b/contributions/demo/despinoy-gdba/README.md @@ -0,0 +1,21 @@ +# Demo: Docker implementation to React native project +## Member +Name: George Bassilious + +Mail: gdba@kth.se + +Github: George-Bassilious + +Name: Eva Despinoy + +Mail: despinoy@kth.se + +Github: evkade + + +##Proposal: +The demo will show how to integrate docker in a React Native application in a video. We will show how to dockerize the different elements of the application. + +This is related to DevOps as docker helps running applications in any environment as it puts the code in containers which virtualizes the operating system of the application. Docker seems to be better than using virtual machines in terms of efficiency,scalability and performance. In DevOps it is important that you can have an ecosystem of practises that automate the work between development and testing and therefore Docker provides that ecosystem in an efficient way. + +The demo is relevant to teach people to use docker. diff --git a/contributions/demo/yuxin-urama/Readme.md b/contributions/demo/yuxin-urama/Readme.md new file mode 100644 index 0000000000..690f57008f --- /dev/null +++ b/contributions/demo/yuxin-urama/Readme.md @@ -0,0 +1,14 @@ +# Video Demo: Github integration with Jenkins + +## Members +Ifeoma Urama (Urama@kth.se) + +Yuxin Meng (yuxinm@kth.se) + +## Outline +1. Introduction of Jenkins as DevOps tool. +2. Why use Jenkins with Github. +3. Demo on how to integrate git with Jenkins + +## Proposal +Jenkins is an open automation tool, written in Java with plugins for continous integration in Devops. It is a tool used to build, test and deploy a reliable software. diff --git a/contributions/essay/aatif-arieltan/README.md b/contributions/essay/aatif-arieltan/README.md new file mode 100644 index 0000000000..624e9fd9a7 --- /dev/null +++ b/contributions/essay/aatif-arieltan/README.md @@ -0,0 +1,23 @@ +## Essay: Comparing DevOps tools you will likely encounter in the workplace + +### Members: + +Name: Ayub Atif + +Mail: aatif@kth.se + +Github: [ayubatif](https://github.com/ayubatif) + +Name: Justin Arieltan + +Mail: arieltan@kth.se + +Github: [Agriad](https://github.com/Agriad) + +### Proposal: + +DevOps encompasses a wide tier of tools including CI/CD tools, code repository hosts, and cloud hosting services. We discuss the differences and similarities of these products along with why one would choose one over the other. We will also give examples of organizations that use these services. + +* Jenkins vs Travis vs Circle CI +* Azure vs GCP vs AWS +* Gitlab vs Github vs Bitbucket diff --git a/contributions/essay/agnespet/README.md b/contributions/essay/agnespet/README.md new file mode 100644 index 0000000000..d60ea8d753 --- /dev/null +++ b/contributions/essay/agnespet/README.md @@ -0,0 +1,11 @@ +# Essay Proposal +I want to write an essay about why to (and how to) use BDD(Behaviour Driven development) in DevOps. +The essay will cover: +- DevOps testing (The testing hourglass) +- What BDD is (short on how it evolved) +- How BDD can improve devOps projects +- The 3 amigos (who should use BDD) +- BDD tools and practices to use and follow + +## Members +Agnes Petäjävaara [anorangesky](https://github.com/anorangesky) \ No newline at end of file diff --git a/contributions/essay/amarh-nwessman/README.md b/contributions/essay/amarh-nwessman/README.md new file mode 100644 index 0000000000..03b1fbf2d2 --- /dev/null +++ b/contributions/essay/amarh-nwessman/README.md @@ -0,0 +1,13 @@ +# Essay: Automated tests for infrastructure code +## Members +Amar Hodzic (amarh@kth.se) + +Niklas Wessman (nwessman@kth.se) +## Proposal +The essay aims to present different ways of automating tests for infrastructure code when using tools such as Terraform and Kubernetes. Although the essay will not focus on any specific tool, rather give an general overview. + +The essay will cover: +* What is infrastructure code +* Why should you test it +* Challanges in automated testing of infrastructure code +* How to test it (e.g. static analysis, unit tests, integration tests) diff --git a/contributions/essay/borzi-karrby/README.md b/contributions/essay/borzi-karrby/README.md new file mode 100644 index 0000000000..aaab08a25f --- /dev/null +++ b/contributions/essay/borzi-karrby/README.md @@ -0,0 +1,27 @@ +# Essay: SaaS, PaaS, IaaS? A taxonomy of cloud service models + +## Members + +Andreas Kärrby (karrby@kth.se) +Github: [andreaskth](https://github.com/andreaskth) + +Eleonora Borzi (borzi@kth.se) +Github: [EleonoraBorzis](https://github.com/EleonoraBorzis) + +## Proposal/motivation + +For new people who are just learning about the cloud, it can be daunting when most learning material often targets professionals who already know about the "why" of the cloud, and just need to know about the "what" and "where" (i.e. "this tool can help you do X, and you could leverage Y for the Z-part"). The vernacular is oftentimes dense with terms thrown around that may just confuse a beginner even more ("___ as a service" is a popular one), and the problem with learning about it is "where to start"? Not knowing which pieces of the cloud-puzzle goes where could for example make the beginner try to understand why one would use Docker and when to use Kubernetes, while in reality these things cannot be compared in this way (in the 'dev' of 'devops', you could liken it to comparing e.g. BFS and DFS to Python, which of course wouldn't make sense since two are graph search algorithms, and the other is a programming language). + +Therefore we would like to write an essay that we would have liked to read when learning about these things. To narrow the scope we want to focus on different cloud service models, how they work, how they are similar and different, their use cases (from the perspective of a budding business, for example), and maybe some other things if we think of them. + +These are topics we plan to explore (more might be added if it will fit the word criteria of 2000 words) + +- Introduction (some history; the move from on-premise deployment to cloud deployment; why; advantages; drawbacks; general comparison) +- Description of the most common cloud service models (SaaS, etc. (as above in title) and how they differ from each other; popular tools available) +- If there's space left, one could describe 2-3 concrete tools more in detail and relate them to the "bigger picture" of cloud services +- Conclusions/discussion/forecast for future + +## Sources +https://www.lexology.com/library/detail.aspx?g=6aaba427-d980-4938-856a-4a1308444cc2 +https://www.bigcommerce.com/blog/saas-vs-paas-vs-iaas/#examples-of-saas-paas-and-iaas +https://bestarion.com/iaas-vs-paas-vs-saas-enter-the-ecommerce-vernacular/ diff --git a/contributions/essay/charande-lazarc/README.md b/contributions/essay/charande-lazarc/README.md new file mode 100644 index 0000000000..7e51c40059 --- /dev/null +++ b/contributions/essay/charande-lazarc/README.md @@ -0,0 +1,29 @@ +# Sustainability of DevOps and Internet of things +Category: Essay + + +The goal of this essay is to investigate how DevOps and internet of things affects sustainable development. +It will be interesting to cover the positive and negative aspects of software automation in IoT regarding to the sustainable development +goals. The [UN](https://sdgs.un.org/goals) has set 17 SDG that the planet need to achieve peace and prosperity on the planet. + +## Authors + +Name: [Lazar Cerovic](https://github.com/lazarko) + + +E-mail: lazarc@kth.se + + +Name: [Charlotte Andersson](https://github.com/charlottea98) + + +E-mail: charande@kth.se + +## Relevance to DevOps +Internet of things (IoT) is a set of technologies that connects every-day objects such as, coffee machine, refrigerators +doors etc. to the internet. For every year the number of connected to online units increase with the digitization, which creates +a demand for DevOps-technologies in order to handle it. + +## Originality +There is a lot of research going on and scientific articles on this topic. Nevertheless, the subject is worth to exploring since it +is a quite hot topic today and constantly evolving. \ No newline at end of file diff --git a/contributions/essay/damne-fwallb/README.md b/contributions/essay/damne-fwallb/README.md new file mode 100644 index 0000000000..7c741a8499 --- /dev/null +++ b/contributions/essay/damne-fwallb/README.md @@ -0,0 +1,18 @@ +# Essay: DevSecOps - the new DevOps? + +### Contributors +Sara Damne - [damne@kth.se](damne@kth.se) - [@damnePers](github.com/damnePers) + +Frida Wallberg - [fwallb@kth.se](fwallb@kth.se) - [@fwallb](github.com/fwallb) + +### Proposal +The essay will compare devops to devsecops and discuss what is required to get from devops to devsecops and what challenges that brings. + +Overview + +- Description of DevOps +- Description of DevSecOps +- Point out the differences +- What is required to go from DevOps to DevSecOps? +- (What are the challenges?) +- Conclusion diff --git a/contributions/essay/ericvi-oscaralm/README.md b/contributions/essay/ericvi-oscaralm/README.md new file mode 100644 index 0000000000..655482122e --- /dev/null +++ b/contributions/essay/ericvi-oscaralm/README.md @@ -0,0 +1,27 @@ +# Essay proposal: Investigation of Containerization Solutions + +# Members +Eric Vickström (ericvi@kth.se) + +Github: vickstrom + +Oscar Almqvist (oscaralm@kth.se) + +Github: oscaralmqvist + +# Proposal + +- What are containers? (Explanation) +- Why would you use it? (Applications) + - Automated scalability + - Monitoring + - Split resources + - etc. +- State-of-the-art analysis, e.g.: + - Docker + - LXC + - Podman +- Comparison between different solutions, w.r.t: + - Usability + - Security + - etc. diff --git a/contributions/essay/kunwu/README.md b/contributions/essay/kunwu/README.md new file mode 100644 index 0000000000..f3423127e0 --- /dev/null +++ b/contributions/essay/kunwu/README.md @@ -0,0 +1,22 @@ +# Essay: The trend of distributed software architecture +## An envolving analysis of different architectural design in distributed services + +### Members +Kun Wu (kunwu@kth.se) +GitHub: [Wkkkkk](https://github.com/Wkkkkk) + +### Proposal + +How to build a large-scale stable system if its components could possibly fail? This has been a issue for +many years. + +In this paper, I'll describe how software architecture has been evolving to address this issue, from [Mainframe computer](https://en.wikipedia.org/wiki/Mainframe_computer), to [Distributed computing] (https://en.wikipedia.org/wiki/Distributed_computing), to [Monolithic application](https://en.wikipedia.org/wiki/Monolithic_application), to [Service-oriented architecture](https://en.wikipedia.org/wiki/Service-oriented_architecture), to [Microservices](https://en.wikipedia.org/wiki/Microservices), to [Service Mesh](https://en.wikipedia.org/wiki/Service_mesh), to [Serverless computing](https://en.wikipedia.org/wiki/Serverless_computing), etc.. + +Through the this ever-changing trend, we can have a holistic view of how possible failure is handled in different times and how to build up automated exception handling which ensures a stable and robust performance. + + +### Suitability of Topic + +A rolling stone gathers no moss. Devops, as part of system infrastructure, ensure that every single service in the whole system can die and reboot without disturbing the overall performance. + +This paper talks about how this sustainability is addressed in different architectural styles. diff --git a/contributions/essay/lerjevik-nacca/README.md b/contributions/essay/lerjevik-nacca/README.md new file mode 100644 index 0000000000..b92bb13373 --- /dev/null +++ b/contributions/essay/lerjevik-nacca/README.md @@ -0,0 +1,24 @@ +# Essay: Comparison of Kubernetes and Nomad + +## Members +- [Dina Lerjevik](https://github.com/dmariel) (lerjevik@kth.se) +- [Patricia Naccachian](https://github.com/patricia-naccachian) (nacca@kth.se) + +## Proposal +We would like to write an essay in which we describe orchestration and compare two commonly used tools: Kubernetes and Nomad. + +We aim to fulfill the following criteria: + +* Format: The essay is in PDF +* Title: The essay has a good title +* Well-structured: The essay is well structured, the ideas are well presented +* Introduction: The essay contains a good introduction +* Conclusion: The essay contains a good conclusion +* Self-contained: The essay is self-contained, one can understand it without reading something else (expected knowledge of the reader: a master student in computer science) +* Figures: The essay contains good figures or listings +* Sound: The essay is sound, factual, and accurate +* References: The essay contains references, appropriate in number and quality (10 good refs is a minimum) +* Elegant: The essay presentation is elegant / visually appealing (eg LaTeX, InDesign) +* Relevant: The essay addresses a topic that is relevant for DevOps + +We aim for pass with distinction. diff --git a/contributions/executable-tutorial/brogard-despinoy/README.md b/contributions/executable-tutorial/brogard-despinoy/README.md new file mode 100644 index 0000000000..e180b30500 --- /dev/null +++ b/contributions/executable-tutorial/brogard-despinoy/README.md @@ -0,0 +1,23 @@ +## Executable Tutorial: Integrate DataDog in existing app + +### Members +Name: André Brogärd + +Mail: brogard@kth.se + +Github: brogard + +Name: Eva Despinoy + +Mail: despinoy@kth.se + +Github: evkade + +### Proposal: +The tutorial will teach the user to integrate DataDog with an existing containerized app, using katacoda. +To do this, we will create a ”To-Do” application with a simple frontend and backend that simulates the user’s app. Also, we will explain why monitoring is important and relevant. + + +* The user will create a free trial account on DataDog (No credit card required) +* The user will integrate the existing application with DataDog +* The user can see logs in DataDog as traffic comes in diff --git a/contributions/executable-tutorial/chrigu/README.md b/contributions/executable-tutorial/chrigu/README.md new file mode 100644 index 0000000000..d292171293 --- /dev/null +++ b/contributions/executable-tutorial/chrigu/README.md @@ -0,0 +1,12 @@ +# Executable Tutorial Proposal: Setting up a Jenkins CI/CD pipeline for deploying to Docker Hub + +## Members + +Christopher Gustafson (chrigu@kth.se) +Github: [ChristopherGustafson](https://github.com/ChristopherGustafson) + +## Proposal + +I want to create a tutorial where the Jenkins tool will be set up to automatically build and deploy a simple node.js application as a Docker Image to Docker Hub. This would combine multiple relevant DevOps courses like CI/CD with Jenkins as well as containers with Docker, which are topics I would like to learn more about. + +The plan right now is to use https://www.katacoda.com/ for the tutorial. diff --git a/contributions/executable-tutorial/cotutiu-moise/README.md b/contributions/executable-tutorial/cotutiu-moise/README.md new file mode 100644 index 0000000000..c938ba6864 --- /dev/null +++ b/contributions/executable-tutorial/cotutiu-moise/README.md @@ -0,0 +1,14 @@ +# Executable tutorial: nginx on vagrant box (with provisioning) + +## Group +Ioana Cotutiu (cotutiu@kth.se), [IC-kth](https://github.com/IC-kth) +Theodor Moise (moise@kth.se), [iriediese](https://github.com/iriediese) + +## Content +Executable tutorial (via katakoda) showing how to configure and provision an nginx web server on a vagrant box, using a Vagrantfile. +This is aimed at showing how to quickly deploy (previously configured) applications in virtual environments running Linux, +providing further insight into system management and administration. + +## Link +Katakoda link: TBA +Repository: TBA diff --git a/contributions/executable-tutorial/mwesslen-larasm/README.md b/contributions/executable-tutorial/mwesslen-larasm/README.md new file mode 100644 index 0000000000..6db86a3ec9 --- /dev/null +++ b/contributions/executable-tutorial/mwesslen-larasm/README.md @@ -0,0 +1,11 @@ +# Tutorial: Automation of web frontend testing using Selenium # + +## Members ## +Markus Wesslén (mwesslen@kth.se) Github: [m4reko](https://github.com/m4reko) + +Lara Rostami (larasm@kth.se) Github: [LaraRos](https://github.com/LaraRos) + +## Proposal ## +We will create a [Katacoda](https://www.katacoda.com/) executable tutorial that shows the basics of web frontend testing using the tool [Selenium](https://www.selenium.dev/) and Python. + +This is DevOps related since it is a flavor of test automation. diff --git a/contributions/executable-tutorial/zidi/README.md b/contributions/executable-tutorial/zidi/README.md new file mode 100644 index 0000000000..7443cc124e --- /dev/null +++ b/contributions/executable-tutorial/zidi/README.md @@ -0,0 +1,16 @@ +# Executable-tutorial: integrate TeamCity with Docker + +## Members + +Chen, Zidi: zidi@kth.se, https://github.com/Chen-Zidi + +waiting for others to join + +## Proposal + +I would like to write a toturial on katacoda. +The idea is to have a small scenario to integrate TeamCity with Docker. +TeamCity is a powerful CI tool, so it should fit the purpose of the course. +By the way, I am new to Docker and TeamCity, so if there are more suggestions, +please tell me :) + diff --git a/contributions/feedback/README.md b/contributions/feedback/README.md index 725f2dd782..a80b2f726b 100644 --- a/contributions/feedback/README.md +++ b/contributions/feedback/README.md @@ -1 +1,14 @@ -To register your intention to give feedback, PR this file (more instructions to come). +Feedback is only for essays and tutorials. + +Some rules for sending a PR for a feedback task: +- Only send the feedback PR for the merged PR essays and tutorials. +- Add the merged PR essays and tutorials issue #ID in your feedback PR. +- Please comment on the merged PR page (The task your want to give feedback on) with the sentence "I will give feedback for this task and my feedback PR id is # ". + + + + +To provide a feedback, please follows the following instruction: + +1. Create a folder following the name convention of using email addresses of two members: email-email. +2. In your folder, create a README.md file and put your feedback information there. diff --git a/contributions/open-source/aronber-yannik/README.md b/contributions/open-source/aronber-yannik/README.md new file mode 100644 index 0000000000..e4e07857c8 --- /dev/null +++ b/contributions/open-source/aronber-yannik/README.md @@ -0,0 +1,14 @@ +# Adding parallel deployment support to deploy-rs + +[`deploy-rs`](https://github.com/serokell/deploy-rs) is a tool to deploy [nix](https://nixos.org) managed remote machines. + +The contribution is to address [#43](https://github.com/serokell/deploy-rs/issues/43) and in extension [#60](https://github.com/serokell/deploy-rs/issues/60). + +## Contributors + +- Aron Hansen Berggren + Email: [aronber@kth.se](mailto:aronber@kth.se) + Github: [arxra](https://github.com/arxra) +- Yannik Sander + Email: [yannik@kth.se](mailto:yannik@kth.se) + Github: [ysndr](https://github.com/ysndr) diff --git a/contributions/presentation/week2/README.md b/contributions/presentation/week2/README.md index 4812cd6016..7b57370d82 100644 --- a/contributions/presentation/week2/README.md +++ b/contributions/presentation/week2/README.md @@ -1,7 +1,6 @@ ## Agenda for Student Presentations in Week 2: -- TBD -- TBD -- TBD -- TBD -- TBD -- TBD \ No newline at end of file +- "Third Party Software Dependency Management" +- "Monitoring with Prometheus" +- "The history of DevOps" +- "DevOps practices in a Sundsvall company" +- "Reproducible Builds with Nix" diff --git a/contributions/presentation/week2/annnik-carllei/README.md b/contributions/presentation/week2/annnik-carllei/README.md new file mode 100644 index 0000000000..503cf72832 --- /dev/null +++ b/contributions/presentation/week2/annnik-carllei/README.md @@ -0,0 +1,21 @@ +# Presentation Proposal + +## Members +Anna Nikolskaya (annnik@kth.se) +Github username: annsudo + +Carl Leijonberg (carllei@kth.se) +Github username: carllei + +## Topic "Third Party Software Dependency Management" +During the presentation we will talk about the importance of managing third party software dependencies. We will highlight issues such management of a large number of software dependencies and how vulnerabilities in third party software can affect your software. We will also discuss tools that can be used to automatically identify security issues in software dependencies. + +## Agenda + + - 📖 Problem and intro (issues with third party software dependencies) + - 🛡 Dependency-check with OWASP + - 📝 Reflecion + Take home message + engagement + + +## Presentation Slides +See the pdf file diff --git a/contributions/presentation/week2/annnik-carllei/Third party software Dependency Management with OWASP.pdf b/contributions/presentation/week2/annnik-carllei/Third party software Dependency Management with OWASP.pdf new file mode 100644 index 0000000000..9a2fac4281 Binary files /dev/null and b/contributions/presentation/week2/annnik-carllei/Third party software Dependency Management with OWASP.pdf differ diff --git a/contributions/presentation/week2/aronber-fbjorkma/README.md b/contributions/presentation/week2/aronber-fbjorkma/README.md new file mode 100644 index 0000000000..26b525a4f2 --- /dev/null +++ b/contributions/presentation/week2/aronber-fbjorkma/README.md @@ -0,0 +1,23 @@ +# Presentation - Monitoring with Prometheus + +## Members + +Aron Hansen Berggren (aronber@kth.se) +Github username: arxra + +Fredrik Björkman (fbjorkma@kth.se) +Github username: fbjorkman + +## Prometheus, monitor your system + +We want to present on the monitoring-tool Prometheus + +We aim to answer questions such as: + +- What is monitoring? (briefly) +- What are metrics? (briefly) +- What is Prometheus? +- How to set up Prometheus? +- How is Prometheus used? +- What are the advantages of using Prometheus? +- What makes Prometheus different from other tools?- diff --git a/contributions/presentation/week2/hheyman-nacca/README.md b/contributions/presentation/week2/hheyman-nacca/README.md new file mode 100644 index 0000000000..4242567ffe --- /dev/null +++ b/contributions/presentation/week2/hheyman-nacca/README.md @@ -0,0 +1,21 @@ +# Presentation Proposal + + ## Members + Hugo Heyman (hheyman@kth.se) + Github username: [hallon-heyman](https://github.com/hallon-heyman) + + Patricia Naccachian (nacca@kth.se) + Github username: [patricia-naccachian](https://github.com/patricia-naccachian) + + ## Proposal +Theh history of DevOps + +Our intention is to to give our viewers a deeper understanding of why and how devops as a concept, practice and profession came to be in the last decade. + + Slide draft + - The problem of separating ops from dev + - the growth of devops as a concept + - Important influencers and their contribution + - the creation of devops as an academic and professional subject and role + - the future of devops + diff --git a/contributions/presentation/week2/isacarv-anhenri/README.md b/contributions/presentation/week2/isacarv-anhenri/README.md index 77ee4feb11..f507a9631f 100644 --- a/contributions/presentation/week2/isacarv-anhenri/README.md +++ b/contributions/presentation/week2/isacarv-anhenri/README.md @@ -16,4 +16,14 @@ - Which DevOps tools is the company using? Why choosing those tools in particular? - Is the company using in-house tools specifically created for automation? - Which are the future plans and aims in the aspect of automation? Is CD relevant? Why? + + +## Agenda +- Introduction +- Question about the interviewed person +- Question about the company +- Conclusion + +[Link to slides](https://docs.google.com/presentation/d/1vNMhWN0C721Y2R9xNN6yF7aWF5pRTIFyH116_k81hks/edit?usp=sharing) + diff --git a/contributions/presentation/week2/yannik/Introduction to Nix.pdf b/contributions/presentation/week2/yannik/Introduction to Nix.pdf new file mode 100644 index 0000000000..825ce0a931 Binary files /dev/null and b/contributions/presentation/week2/yannik/Introduction to Nix.pdf differ diff --git a/contributions/presentation/week3/yannik/README.md b/contributions/presentation/week2/yannik/README.md similarity index 74% rename from contributions/presentation/week3/yannik/README.md rename to contributions/presentation/week2/yannik/README.md index 776257d9a9..e776db8321 100644 --- a/contributions/presentation/week3/yannik/README.md +++ b/contributions/presentation/week2/yannik/README.md @@ -8,9 +8,14 @@ Definitions can be combined to a point where whole system configurations can be - Nix (the language) - Nix Derivations (Description of an Artifact) - Nixpkgs (Central Package Repository) -- Example Applications of Nix - - Integrations +- Example Applications of Nix + - Integrations - NixOS (define a local system) - NixOps (deploy remote machines) Due to timing constraints a subset of these will be presented or some points will mostly be mentioned with pointers to external resources. + +## Presentation + +- [Latest Version](https://docs.google.com/presentation/d/1DTzgAa1Qi58BFyykg2jIJB0z6MAqxtPqNEp6zp3zIOU/edit?usp=sharing) +- [Presented Version](./Introduction to Nix.pdf) diff --git a/contributions/presentation/week3/gchang-wska/README.md b/contributions/presentation/week3/gchang-wska/README.md new file mode 100644 index 0000000000..f0ea833e19 --- /dev/null +++ b/contributions/presentation/week3/gchang-wska/README.md @@ -0,0 +1,23 @@ +# Presentation Proposal + +## Members +Gabriel Chang (gchang@kth.se) +Github username: ChangGabriel + +William Skagerström (wska@kth.se) +Github username: wska + +## Topic +We want to give an overview of Continuous Testing and its role in devops. How does it relate to CI/CD? +See outline for more detail. + +## Outline +* What is Continuous Testing in Devops? +* Continuous Testing vs Automated Testing +* Advantages and challenges of Continuous Testing +* Continuous Testing Tools +* The future of Continuous Testing + + +## Slides: +[Presentation](TBA) diff --git a/contributions/presentation/week3/renanb-ved.megha/README.md b/contributions/presentation/week3/renanb-ved.megha/README.md new file mode 100644 index 0000000000..24e3987ef2 --- /dev/null +++ b/contributions/presentation/week3/renanb-ved.megha/README.md @@ -0,0 +1,17 @@ +# Continuous Testing in DevOps + +## Members: +* renanb@kth.se, Github: Renugaa +* ved.megha@gmail.com, Github: gangwalmegha + +## Abstract: +Continuous testing is an important process of the overall CI-CD (Continuous Integration Continuous delivery) pipeline and it is one of the key success criteria for successful DevOps implementation and adaptation in the organization. Our presentation will provide a high-level overview of the Testing framework in the context of the CI-CD pipeline. It will also delve into possible implementation approaches and tools that can be used. We will conclude the presentation by reflecting on the critical success factors and benefits of continuous testing. + +## Slides +* Importance of testing in making DevOps successful +* Basic framework for Continuous Testing +* Implementation of Continuous Testing in CICD pipeline +* Difference between Continuous Testing and Test Automation +* List of Tools +* Critical success factors and benefits +* References diff --git a/contributions/presentation/week4/cpiehl-charande/README.md b/contributions/presentation/week4/cpiehl-charande/README.md new file mode 100644 index 0000000000..20b1787e56 --- /dev/null +++ b/contributions/presentation/week4/cpiehl-charande/README.md @@ -0,0 +1,29 @@ +# Presentation: GitOps + +## Members + +Name: Carl Piehl + +Mail: cpiehl@kth.se + +Github: [cpiehl1](https://github.com/cpiehl1) + +Name: Charlotte Andersson + +Mail: charande@kth.se + +Github: [charlottea98](https://github.com/charlottea98) + +## Proposal + +A presentation about the recently coined term GitOps. Proposed outline below: + +- What is GitOps, and how does it differ from traditional DevOps? + +- What does a typical GitOps pipeline look like? + +- What tools are commonly used in GitOps? + +- What are the advantages/disadvantages of GitOps? + +- Are there alternatives to GitOps? \ No newline at end of file diff --git a/contributions/presentation/week4/despinoy-gdba/README.md b/contributions/presentation/week4/despinoy-gdba/README.md new file mode 100644 index 0000000000..83763293be --- /dev/null +++ b/contributions/presentation/week4/despinoy-gdba/README.md @@ -0,0 +1,19 @@ +## PRESENTATION: Kanban and Scrum + +### Members +Name: George Bassilious +Mail: gdba@kth.se +Github: George-Bassilious +Name: Eva Despinoy +Mail: despinoy@kth.se +Github: evkade + +### Proposal +The goal of the presentation is to describe Scrum and Kanban, compare them and analyze their strengths and weaknesses in different work structures (a startup, a big established company….) for example. + +#### Presentation structure + +Link between devops and the two techniques +Background Kanban +Background Scrum +Comparison diff --git a/contributions/presentation/week5/aatif/README.md b/contributions/presentation/week5/aatif/README.md new file mode 100644 index 0000000000..96f31cc4e3 --- /dev/null +++ b/contributions/presentation/week5/aatif/README.md @@ -0,0 +1,24 @@ +# Presentation Proposal: DevSecOps takeaways from Hacking into Google's Network for $133,337 + +## Members +Ayub Atif (aatif@kth.se) +GitHub: [ayubatif](https://github.com/ayubatif) + +## Topic +I want to use the report for a potential Remote Code Execution attack in Google Cloud Deployment Manager in May 2020 to give an overview of Google Cloud Deployment, +the security vulnerabilities observed, and the approach to finding such a bug. +The source is [Hacking into Google's Network for $133,337](https://www.ezequiel.tech/2020/05/rce-in-cloud-dm.html) by Ezequiel Pereira, which I followed up on from a comment +by @monperrus on the Devops and Security issue. + +See outline for more detail. + +## Outline +* What is Google Cloud Deployment Manager? +* Short reminder of the DevSecOps concept. +* What sort of approach is taken to find the vulnerabilties? (multiple options via audience interaction) +* Where were the actual vulnerabilities? +* Relating the vulnerabilities to other DevOps platforms you may work on. +* Challenges and compromises in your DevSecOps solutions. +* Takeaway introduction to bug bounty programs. + +The contents may be altered to fit the strict presentation timeframe, but the core content should remain. diff --git a/grading-criteria.md b/grading-criteria.md index 8d22529fc7..99dc8d3d8a 100644 --- a/grading-criteria.md +++ b/grading-criteria.md @@ -134,7 +134,7 @@ To get a distinction, you must pass and have at least 1 "remarkable". ## Feedback -The concept: you provide constructive and timely feeback about one essay or one video demo or one executable tutorial. +The concept: you provide constructive and timely feeback about one task from categories "essay" and "executable tutorial". The feedback is provided in a written manner, as a well-structured comment on the PR of the task. | | Yes | No | Remarkable | diff --git a/tools/requirements.txt b/tools/requirements.txt index 7aec33a624..1476abeb4f 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1 +1,2 @@ PTable +PyGithub diff --git a/tools/stat_submissions.py b/tools/stat_submissions.py index 93e9dfe0a9..e7069e65eb 100644 --- a/tools/stat_submissions.py +++ b/tools/stat_submissions.py @@ -4,11 +4,18 @@ import sys, os, time, logging import getopt +from github import Github from prettytable import PrettyTable SUBMISSIONS_PATH = '' PRINT_STUDENT_STAT = False PRINT_IN_MARKDOWN = False +PUBLISH = False + +# ENVs for publishing the results +GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") +REPO_FULLNAME = os.getenv("REPO_FULLNAME") +ISSUE_NUMBER = os.getenv("ISSUE_NUMBER") def main(): handle_args(sys.argv[1:]) @@ -23,19 +30,38 @@ def main(): stat_per_student.update({name:[category]}) else: stat_per_student[name].append(category) - print("*Automatically genereated at %s*"%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) - print("Statistic Information for Each Category") - print("") - print_stat_category_markdown(stat_per_category) if PRINT_IN_MARKDOWN else print_stat_category(stat_per_category) - print("") + content = "" + content = content + "*Automatically genereated at %s*\n"%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + + content = content + "Statistic Information for Each Category\n" + + if PRINT_IN_MARKDOWN: + content = content + get_stat_category_markdown(stat_per_category) + else: + content = content + get_stat_category(stat_per_category) if PRINT_STUDENT_STAT: - print("Statistic Information for Each Student") - print("") - print_stat_student_markdown(stat_per_student) if PRINT_IN_MARKDOWN else print_stat_student(stat_per_student) + content = content + "\nStatistic Information for Each Student\n" + if PRINT_IN_MARKDOWN: + content = content + get_stat_student_markdown(stat_per_student) + else: + content = content + get_stat_student(stat_per_student) + + if PUBLISH: + publish_on_issue(content) + else: + print (content) -def print_stat_category(stat_info): +def publish_on_issue(content): + github = Github(GITHUB_TOKEN) + gitrepo = github.get_repo(REPO_FULLNAME) + if ISSUE_NUMBER != "" and int(ISSUE_NUMBER) > 0: + issue = gitrepo.get_issue(number = int(ISSUE_NUMBER)) + issue.edit(body = content) + + +def get_stat_category(stat_info): stat_table = PrettyTable() stat_table.field_names = ["Category name", "Registrations"] @@ -45,20 +71,24 @@ def print_stat_category(stat_info): total = total + stat_info[category]["task_count"] stat_table.add_row(["TOTAL", total]) - print(stat_table) + return stat_table.get_string() -def print_stat_category_markdown(stat_info): - print("|Category name | Registrations|") - print("|--------------|--------------|") +def get_stat_category_markdown(stat_info): + return_str = """ +|Category name | Registrations| +|--------------|--------------| +""" total = 0 for category in stat_info: - print("|%s|%s|"%(category, stat_info[category]["task_count"])) + return_str = return_str + "|%s|%s|\n"%(category, stat_info[category]["task_count"]) total = total + stat_info[category]["task_count"] - print("|--------------|------------|") - print("|TOTAL|%s|"%total) + return_str = return_str + "|--------------|------------|\n" + return_str = return_str + "|TOTAL|%s|\n"%total + + return return_str -def print_stat_student(stat_info): +def get_stat_student(stat_info): stat_table = PrettyTable() stat_table.field_names = ["Index", "Student name", "Registrations Count", "Categories"] @@ -73,32 +103,36 @@ def print_stat_student(stat_info): if task_count > 4: logging.warn("%s's task_count is: %d (> 4)"%(student, task_count)) - print(stat_table) + return_str = stat_table.get_string() - print("") - print("Summary") + return_str = return_str + "\nSummary\n" for count in summary: - print("%s students with %s registered tasks: %s"%(len(summary[count]), count, ", ".join(summary[count]))) + return_str = return_str + "%s students with %s registered tasks: %s\n"%(len(summary[count]), count, ", ".join(summary[count])) -def print_stat_student_markdown(stat_info): - print("|Index | Student name | Registrations Count | Categories|") - print("|------|--------------|---------------------|-----------|") + return return_str + +def get_stat_student_markdown(stat_info): + return_str = """ +|Index | Student name | Registrations Count | Categories| +|------|--------------|---------------------|-----------| +""" index = 1 summary = {4:[], 3:[], 2:[], 1:[]} for student in stat_info: task_count = len(stat_info[student]) - print("|%s|%s|%s|%s|"%(index, student, task_count, " ".join(stat_info[student]))) + return_str = return_str + "|%s|%s|%s|%s|\n"%(index, student, task_count, " ".join(stat_info[student])) summary[task_count].append(student) index = index + 1 # if task_count >= 4: # logging.warn("%s's task_count >= 4"%student) - print("") - print("Summary") + return_str = return_str + "\nSummary\n" for count in summary: - print("**%s students with %s registered tasks:** %s"%(len(summary[count]), count, ", ".join(summary[count]))) + return_str = return_str + "**%s students with %s registered tasks:** %s\n"%(len(summary[count]), count, ", ".join(summary[count])) + + return return_str def stat_categories(path): categories = dict() @@ -142,9 +176,10 @@ def handle_args(argv): global SUBMISSIONS_PATH global PRINT_STUDENT_STAT global PRINT_IN_MARKDOWN + global PUBLISH try: - opts, args = getopt.getopt(argv, "p:m", ["path=", "printStudentStat", "printInMarkdown", "help"]) + opts, args = getopt.getopt(argv, "p:m", ["path=", "printStudentStat", "printInMarkdown", "publish", "help"]) except getopt.GetoptError as error: logging.error(error) print_help_info() @@ -160,6 +195,8 @@ def handle_args(argv): PRINT_STUDENT_STAT = True elif opt in ("-m", "--printInMarkdown"): PRINT_IN_MARKDOWN = True + elif opt in ("--publish"): + PUBLISH = True if SUBMISSIONS_PATH == '': logging.error("You should use -p or --path= to specify the path to students submissions") @@ -175,6 +212,7 @@ def print_help_info(): print('optional:') print(' --printStudentStat print statistic data per student') print(' -m or --printInMarkdown print statistic data in markdown syntax') + print(' --publish publish the statistics on an issue') print('stat_submissions.py --help to display this help info') if __name__ == "__main__":