git-classrooms

Main Application of GitClassrooms.

https://github.com/git-classrooms/git-classrooms

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (14.3%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

Main Application of GitClassrooms.

Basic Info
  • Host: GitHub
  • Owner: git-classrooms
  • License: mpl-2.0
  • Language: TypeScript
  • Default Branch: develop
  • Homepage: https://git-classrooms.dev
  • Size: 7.69 MB
Statistics
  • Stars: 8
  • Watchers: 1
  • Forks: 1
  • Open Issues: 4
  • Releases: 1
Created over 1 year ago · Last pushed 7 months ago
Metadata Files
Readme License Citation

README.md

GitClassrooms

Version: v1.0.0

This project aims to develop a teaching tool integrated with GitLab to manage digital classrooms, distribute assignments, and automate the grading of students' work. Traditional learning management systems often lack integration with version control systems like Git, making it difficult to manage and evaluate programming tasks. This project addresses that gap by creating a standalone application that interacts with GitLab's API. The solution enables instructors to create and manage classrooms, assign programming tasks, and implement both manual and automated grading systems. Through features like OAuth-based authentication, team management, and GitLab repository integration, the tool facilitates efficient course management, offering both autonomy and data sovereignty to educational institutions.

Dashboard of GitClassrooms

Documents

Project Structure

The project has two parts:

  • Golang with fiber as backend=> /
  • React with Typescript and vite as Frontend => /frontend/

The frontend proxies the requests for the path /api/* to the backend server.

Production

Docker Compose is used to deploy the application.

Steps for deployment

  1. Cloning the repository
    Alternatively, you can directly use the docker-compose.yaml and .env.example files.
  2. Configure environment variables bash cp .env.example .env
  3. Creating an application in GitLab
    1. Create a new application in GitLab with the following Redirect URI:
      <PUBLIC_URL>/api/v1/auth/gitlab/callback
    2. Set the application to confidential (Confidential: true) and select the scope "api". These are the default settings.
    3. Copy the Application ID and Secret into the .env file and add the URLs for PUBLIC_URL and GITLAB_URL.
  4. SMTP configuration
    Add SMTP credentials to send invitation emails.
  5. Configure the database in the .env file.
  6. Starting the application
    To start the application and a PostgreSQL database using Docker Compose: bash docker compose -–env-file .env up -d

Alternatively, deployment can also take place with an already present PostgreSQL server by running only the application image

Create .env like specified above and add the database credentials of your existing database. and run the image like:

bash docker run -d --env-file .env --name git-classrooms -p 3000:3000 ghcr.io/git-classrooms/git-classrooms:latest

Development

For development, we use the git flow branching model for simplicity.

Setup

The Setup for development is documented in the following file dev_setup.md

Code Generation

The following file-types in our repo are auto-generated: - mocks - gorm-gen queries - swagger documentation - swagger-client

The first three types are generated when running go generate which is automatically executed before each build when running the app through air.

To generate the frontend swagger-client after some changes to the docs the following script needs to be executed:

```bash

Linux / Mac / WSL

./script/swagger-codegen.sh

Windows

./script/swagger-codegen.ps1 ```

Run dev image locally

To test the completely build image locally you can use the following command:

bash docker compose -f docker-compose.dev.yml up --build

And access the application via http://localhost:3000

Swagger-UI testing (recommended)

  1. Run the app described in Dev-Setup
  2. Add Swag comments directly above your endpoint
  3. Visit the page http://localhost:5173/docs.html
  4. Click on the Sign-In-Button on the top-right
  5. Get your csrf-token
  6. Test your endpoints
  7. Refresh page after swag-comments were edited

Postman testing (not recommended)

  1. Login via gitlab in the browser
  2. Copy the session_id cookie from the browser to your postman environment
  3. Copy the csrf_ cookie from the browser to your postman environment
  4. Add the following header to your POST|PUT|PATCH|DELETE requests:
    • X-CSRF-Token: {{csrf_}}

Writing Tests

...

To run the test simply exec the following script: ```bash

Linux / Mac / WSL

./script/testbackend.sh ./script/testfrontend.sh

Windows

./script/testbackend.ps1 ./script/testfrontend.ps1 ```

Environments

We have to environments:

  • Staging: https//staging.hs-flensburg.dev

Owner

  • Name: GitClassrooms
  • Login: git-classrooms
  • Kind: organization
  • Location: Germany

Citation (CITATION.cff)

cff-version: 1.2.0
title: GitClassrooms
message: >-
  This project is licensed under the MPL 2.0, if you use it
  or parts of it, please cite us with this attribution.
type: software
authors:
  - given-names: Philipp
    family-names: Borucki
    email: philipp.borucki@stud.hs-flensburg.de
    affiliation: Flensburg University of Applied Sciences
  - affiliation: Flensburg University of Applied Sciences
    family-names: Friedrichsen
    given-names: Pascal
    email: pascal.friedrichsen@stud.hs-flensburg.de
  - given-names: Dominik
    family-names: Heckner
    email: dominik.heckner@stud.hs-flensburg.de
    affiliation: Flensburg University of Applied Sciences
  - family-names: Ingwersen
    given-names: Hauke
    email: hauke.ingwersen@stud.hs-flensburg.de
    affiliation: Flensburg University of Applied Sciences
  - family-names: Klein
    given-names: Claas Thore
    email: claas.klein@stud.hs-flensburg.de
    affiliation: Flensburg University of Applied Sciences
  - email: jannes.nebendahl@stud.hs-flensburg.de
    given-names: Jannes
    family-names: Nebendahl
    affiliation: Flensburg University of Applied Sciences
  - family-names: Neufeldt
    given-names: Stefan
    email: stefan.neufeldt@stud.hs-flensburg.de
    affiliation: Flensburg University of Applied Sciences
  - family-names: Petersen
    given-names: Fabian
    email: fabian.petersen@stud.hs-flensburg.de
    affiliation: Flensburg University of Applied Sciences
  - family-names: Porsche
    given-names: Nils
    email: nils.porsche@stud.hs-flensburg.de
    affiliation: Flensburg University of Applied Sciences
repository-code: 'https://github.com/GitClassrooms/git-classrooms'
abstract: >-
  The "GitClassrooms" project aims to develop a teaching
  tool integrated with GitLab to manage digital classrooms,
  distribute assignments, and automate the grading of
  students' work. Traditional learning management systems
  often lack integration with version control systems like
  Git, making it difficult to manage and evaluate
  programming tasks. This project addresses that gap by
  creating a standalone application that interacts with
  GitLab's API. The solution enables instructors to create
  and manage classrooms, assign programming tasks, and
  implement both manual and automated grading systems.
  Through features like OAuth-based authentication, team
  management, and GitLab repository integration, the tool
  facilitates efficient course management, offering both
  autonomy and data sovereignty to educational
  institutions.
license: MPL-2.0
version: 1.0.0

GitHub Events

Total
  • Watch event: 2
  • Delete event: 7
  • Push event: 43
  • Pull request review comment event: 2
  • Pull request review event: 7
  • Pull request event: 16
  • Fork event: 1
  • Create event: 9
Last Year
  • Watch event: 2
  • Delete event: 7
  • Push event: 43
  • Pull request review comment event: 2
  • Pull request review event: 7
  • Pull request event: 16
  • Fork event: 1
  • Create event: 9

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 0
  • Total pull requests: 8
  • Average time to close issues: N/A
  • Average time to close pull requests: 15 days
  • Total issue authors: 0
  • Total pull request authors: 2
  • Average comments per issue: 0
  • Average comments per pull request: 0.0
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 8
  • Average time to close issues: N/A
  • Average time to close pull requests: 15 days
  • Issue authors: 0
  • Pull request authors: 2
  • Average comments per issue: 0
  • Average comments per pull request: 0.0
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • Onyxmoon (3)
Pull Request Authors
  • akatranlp (7)
  • choffmann (2)
  • Onyxmoon (1)
Top Labels
Issue Labels
bug (2) good first issue (1) ci (1)
Pull Request Labels
enhancement (2) documentation (1)

Dependencies

.github/workflows/build-and-push-dev.yaml actions
  • actions/checkout v4 composite
  • docker/build-push-action v6 composite
  • docker/login-action v3 composite
  • docker/setup-buildx-action v3 composite
  • docker/setup-qemu-action v3 composite
.github/workflows/build-and-push-prod.yaml actions
  • actions/checkout v4 composite
  • docker/build-push-action v5 composite
  • docker/login-action v3 composite
  • docker/setup-buildx-action v3 composite
  • docker/setup-qemu-action v3 composite
  • thomaseizinger/create-pull-request 1.0.0 composite
  • thomaseizinger/create-release 1.0.0 composite
.github/workflows/draft-release.yaml actions
  • actions/checkout v4 composite
  • thomaseizinger/create-pull-request 1.0.0 composite
Dockerfile docker
  • alpine 3.18 build
  • golang 1.22-alpine build
  • node 20-alpine build
  • preparer-go latest build
  • swaggerapi/swagger-codegen-cli-v3 latest build
go.mod go
  • dario.cat/mergo v1.0.0
  • filippo.io/edwards25519 v1.1.0
  • github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161
  • github.com/KyleBanks/depth v1.2.1
  • github.com/Microsoft/go-winio v0.6.2
  • github.com/Microsoft/hcsshim v0.11.7
  • github.com/andybalholm/brotli v1.1.0
  • github.com/brianvoe/gofakeit/v7 v7.0.4
  • github.com/caarlos0/env/v10 v10.0.0
  • github.com/cenkalti/backoff/v4 v4.2.1
  • github.com/containerd/containerd v1.7.21
  • github.com/containerd/log v0.1.0
  • github.com/containerd/platforms v0.2.1
  • github.com/cpuguy83/dockercfg v0.3.1
  • github.com/davecgh/go-spew v1.1.1
  • github.com/distribution/reference v0.6.0
  • github.com/docker/docker v27.2.1+incompatible
  • github.com/docker/go-connections v0.5.0
  • github.com/docker/go-units v0.5.0
  • github.com/felixge/httpsnoop v1.0.4
  • github.com/go-logr/logr v1.4.1
  • github.com/go-logr/stdr v1.2.2
  • github.com/go-ole/go-ole v1.3.0
  • github.com/go-openapi/jsonpointer v0.21.0
  • github.com/go-openapi/jsonreference v0.21.0
  • github.com/go-openapi/spec v0.21.0
  • github.com/go-openapi/swag v0.23.0
  • github.com/go-sql-driver/mysql v1.8.1
  • github.com/gofiber/fiber/v2 v2.52.4
  • github.com/gofiber/storage/memory v1.3.4
  • github.com/gofiber/storage/postgres v1.3.4
  • github.com/gofiber/swagger v1.0.0
  • github.com/gogo/protobuf v1.3.2
  • github.com/golang/protobuf v1.5.4
  • github.com/google/go-querystring v1.1.0
  • github.com/google/uuid v1.6.0
  • github.com/hashicorp/go-cleanhttp v0.5.2
  • github.com/hashicorp/go-retryablehttp v0.7.7
  • github.com/jackc/pgpassfile v1.0.0
  • github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761
  • github.com/jackc/pgx/v5 v5.7.1
  • github.com/jackc/puddle/v2 v2.2.2
  • github.com/jinzhu/inflection v1.0.0
  • github.com/jinzhu/now v1.1.5
  • github.com/joho/godotenv v1.5.1
  • github.com/josharian/intern v1.0.0
  • github.com/klauspost/compress v1.17.9
  • github.com/lib/pq v1.10.9
  • github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed
  • github.com/magiconair/properties v1.8.7
  • github.com/mailru/easyjson v0.7.7
  • github.com/mattn/go-colorable v0.1.13
  • github.com/mattn/go-isatty v0.0.20
  • github.com/mattn/go-runewidth v0.0.15
  • github.com/mfridman/interpolate v0.0.2
  • github.com/moby/docker-image-spec v1.3.1
  • github.com/moby/patternmatcher v0.6.0
  • github.com/moby/sys/sequential v0.5.0
  • github.com/moby/sys/user v0.3.0
  • github.com/moby/sys/userns v0.1.0
  • github.com/moby/term v0.5.0
  • github.com/morikuni/aec v1.0.0
  • github.com/opencontainers/go-digest v1.0.0
  • github.com/opencontainers/image-spec v1.1.0
  • github.com/philhofer/fwd v1.1.2
  • github.com/pkg/errors v0.9.1
  • github.com/pmezard/go-difflib v1.0.0
  • github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b
  • github.com/pressly/goose/v3 v3.22.1
  • github.com/rivo/uniseg v0.4.7
  • github.com/sethvargo/go-retry v0.3.0
  • github.com/shirou/gopsutil/v3 v3.24.1
  • github.com/shoenig/go-m1cpu v0.1.6
  • github.com/sirupsen/logrus v1.9.3
  • github.com/stretchr/objx v0.5.2
  • github.com/stretchr/testify v1.9.0
  • github.com/swaggo/files/v2 v2.0.0
  • github.com/swaggo/swag v1.16.3
  • github.com/testcontainers/testcontainers-go v0.32.0
  • github.com/testcontainers/testcontainers-go/modules/postgres v0.32.0
  • github.com/tinylib/msgp v1.1.8
  • github.com/tklauser/go-sysconf v0.3.13
  • github.com/tklauser/numcpus v0.7.0
  • github.com/valyala/bytebufferpool v1.0.0
  • github.com/valyala/fasthttp v1.52.0
  • github.com/valyala/tcplisten v1.0.0
  • github.com/xanzy/go-gitlab v0.93.2
  • github.com/yusufpapurcu/wmi v1.2.4
  • go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0
  • go.opentelemetry.io/otel v1.26.0
  • go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0
  • go.opentelemetry.io/otel/metric v1.26.0
  • go.opentelemetry.io/otel/trace v1.26.0
  • go.uber.org/multierr v1.11.0
  • golang.org/x/crypto v0.27.0
  • golang.org/x/mod v0.17.0
  • golang.org/x/oauth2 v0.16.0
  • golang.org/x/sync v0.8.0
  • golang.org/x/sys v0.25.0
  • golang.org/x/text v0.18.0
  • golang.org/x/time v0.3.0
  • golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d
  • google.golang.org/appengine v1.6.8
  • google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80
  • google.golang.org/protobuf v1.33.0
  • gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
  • gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
  • gopkg.in/yaml.v3 v3.0.1
  • gorm.io/datatypes v1.1.1-0.20230130040222-c43177d3cf8c
  • gorm.io/driver/mysql v1.5.1-0.20230509030346-3715c134c25b
  • gorm.io/driver/postgres v1.5.4
  • gorm.io/gen v0.3.23
  • gorm.io/gorm v1.25.5
  • gorm.io/hints v1.1.0
  • gorm.io/plugin/dbresolver v1.4.7
go.sum go
  • 254 dependencies
frontend/package.json npm
  • @tanstack/eslint-plugin-query ^5.17.22 development
  • @tanstack/router-cli ^1.28.2 development
  • @tanstack/router-devtools ^1.28.4 development
  • @testing-library/react ^14.0.0 development
  • @types/node ^20.11.10 development
  • @types/react ^18.2.15 development
  • @types/react-dom ^18.2.7 development
  • @typescript-eslint/eslint-plugin ^6.0.0 development
  • @typescript-eslint/parser ^6.0.0 development
  • @vitejs/plugin-react ^4.3.1 development
  • @vitest/coverage-v8 ^1.6.0 development
  • autoprefixer ^10.4.17 development
  • concurrently ^8.2.2 development
  • eslint ^8.45.0 development
  • eslint-plugin-react-hooks ^4.6.0 development
  • eslint-plugin-react-refresh ^0.4.3 development
  • postcss ^8.4.33 development
  • prettier ^3.2.4 development
  • tailwindcss ^3.4.1 development
  • typescript ^5.0.2 development
  • vite ^5.4.1 development
  • vitest ^1.6.0 development
  • @hookform/resolvers ^3.3.4
  • @radix-ui/react-alert-dialog ^1.1.1
  • @radix-ui/react-avatar ^1.0.4
  • @radix-ui/react-checkbox ^1.1.1
  • @radix-ui/react-dialog ^1.1.1
  • @radix-ui/react-dropdown-menu ^2.0.6
  • @radix-ui/react-hover-card ^1.0.7
  • @radix-ui/react-label ^2.0.2
  • @radix-ui/react-popover ^1.0.7
  • @radix-ui/react-scroll-area ^1.1.0
  • @radix-ui/react-select ^2.1.1
  • @radix-ui/react-separator ^1.1.0
  • @radix-ui/react-slot ^1.1.0
  • @radix-ui/react-switch ^1.0.3
  • @radix-ui/react-tabs ^1.1.0
  • @radix-ui/react-tooltip ^1.1.2
  • @tanstack/react-query ^5.17.19
  • @tanstack/react-query-devtools ^5.17.21
  • @tanstack/react-router ^1.28.4
  • axios ^1.6.7
  • class-variance-authority ^0.7.0
  • clsx ^2.1.0
  • cmdk ^0.2.1
  • date-fns ^3.6.0
  • lucide-react ^0.439.0
  • react ^18.2.0
  • react-day-picker 8.10.1
  • react-dom ^18.2.0
  • react-hook-form ^7.50.0
  • sonner ^1.5.0
  • tailwind-merge ^2.2.1
  • tailwindcss-animate ^1.0.7
  • vaul ^0.9.2
  • zod ^3.22.4
frontend/yarn.lock npm
  • 673 dependencies