Skip to content

Commit

Permalink
Merge branch 'develop' into development/enable-parallel-unit-testing
Browse files Browse the repository at this point in the history
  • Loading branch information
DominikRemo authored Sep 22, 2023
2 parents b8b389d + 6543ec6 commit e042540
Show file tree
Hide file tree
Showing 203 changed files with 3,541 additions and 1,112 deletions.
9 changes: 0 additions & 9 deletions .ci/E2E-tests/execute.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,3 @@ cd docker
docker compose -f $COMPOSE_FILE pull artemis-cypress $DB nginx
docker compose -f $COMPOSE_FILE build --build-arg WAR_FILE_STAGE=external_builder --no-cache --pull artemis-app
docker compose -f $COMPOSE_FILE up --exit-code-from artemis-cypress
exitCode=$?
cd ..
echo "Cypress container exit code: $exitCode"
if [ $exitCode -eq 0 ]
then
touch .successful
else
echo "Not creating success file because the tests failed"
fi
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,14 +120,14 @@ jobs:
uses: docker/setup-buildx-action@v3
# Build and Push to GitHub Container Registry
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
uses: docker/login-action@v3
if: ${{ steps.compute-tag.outputs.result != 'FALSE' }}
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and Push to GitHub Container Registry
uses: docker/build-push-action@v4
uses: docker/build-push-action@v5
if: ${{ steps.compute-tag.outputs.result != 'FALSE' }}
with:
# beware that the linux/arm64 build from the registry is using an amd64 compiled .war file as
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,11 @@
15. **[Learning analytics](https://ls1intum.github.io/Artemis/user/learning-analytics/)**: Artemis integrated different statistics for students to compare themselves to the course average. It allows instructors to evaluate the average student performance based on exercises and competencies.
16. **[Adaptive Learning](https://ls1intum.github.io/Artemis/user/adaptive-learning/)**: Artemis allows instructors and students to define and track competencies. Students can monitor their progress towards these goals, while instructors can provide tailored feedback. This approach integrates lectures and exercises under overarching learning objectives.
17. **[Tutorial Groups](https://ls1intum.github.io/Artemis/user/tutorialgroups/)**: Artemis support the management of tutorial groups of a course. This includes planning the sessions, assigning responsible tutors, registering students and tracking the attendance.
18. **[Scalable](https://ls1intum.github.io/Artemis/user/scaling/)**: Artemis scales to multiple courses with thousands of students. In fact, the largest course had 2,400 students. Administrators can easily scale Artemis with additional build agents in the continuous integration environment.
19. **[High user satisfaction](https://ls1intum.github.io/Artemis/user/user-experience/)**: Artemis is easy to use, provides guided tutorials. Developers focus on usability, user experience, and performance.
20. **Customizable**: It supports multiple instructors, editors, and tutors per course and allows instructors to customize many course settings
21. **[Open-source](https://ls1intum.github.io/Artemis/dev/open-source/)**: Free to use with a large community and many active maintainers.
18. **[Iris](https://artemis.cit.tum.de/about-iris)**: Artemis integrates Iris, a chatbot that supports students and instructors with common questions and tasks.
19. **[Scalable](https://ls1intum.github.io/Artemis/user/scaling/)**: Artemis scales to multiple courses with thousands of students. In fact, the largest course had 2,400 students. Administrators can easily scale Artemis with additional build agents in the continuous integration environment.
20. **[High user satisfaction](https://ls1intum.github.io/Artemis/user/user-experience/)**: Artemis is easy to use, provides guided tutorials. Developers focus on usability, user experience, and performance.
21. **Customizable**: It supports multiple instructors, editors, and tutors per course and allows instructors to customize many course settings
22. **[Open-source](https://ls1intum.github.io/Artemis/dev/open-source/)**: Free to use with a large community and many active maintainers.

## Roadmap

Expand Down
5 changes: 3 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,10 @@ dependencies {
implementation "org.imsglobal:basiclti-util:1.2.0"
implementation "org.jasypt:jasypt:1.9.3"
implementation "me.xdrop:fuzzywuzzy:1.4.0"
implementation "com.atlassian.bamboo:bamboo-specs:9.2.1"
implementation "com.atlassian.bamboo:bamboo-specs:9.3.3"
implementation ("org.yaml:snakeyaml") {
version {
strictly "1.33" // needed for Bamboo-specs and to reduce the number of vulnerabilities, also see https://mvnrepository.com/artifact/org.yaml/snakeyaml
strictly "2.0" // needed for Bamboo-specs and to reduce the number of vulnerabilities, also see https://mvnrepository.com/artifact/org.yaml/snakeyaml
}
}

Expand Down Expand Up @@ -346,6 +346,7 @@ dependencies {
implementation "org.commonmark:commonmark:0.21.0"
implementation "commons-fileupload:commons-fileupload:1.5"
implementation "net.lingala.zip4j:zip4j:2.11.5"
implementation "org.jgrapht:jgrapht-core:1.5.2"


annotationProcessor "org.hibernate:hibernate-jpamodelgen:${hibernate_version}"
Expand Down
15 changes: 12 additions & 3 deletions docker/atlassian.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ services:
image: ghcr.io/ls1intum/artemis-jira:9.4.3
pull_policy: always
volumes:
- artemis-jira-data:/var/atlassian/application-data/jira
- artemis-jira-data:/var/atlassian/application-data/jira
ports:
- "8081:8080"
# expose the port to make it reachable docker internally even if the external port mapping changes
Expand All @@ -24,7 +24,7 @@ services:
hostname: bitbucket
extra_hosts:
- "host.docker.internal:host-gateway"
image: ghcr.io/ls1intum/artemis-bitbucket:8.8.2
image: ghcr.io/ls1intum/artemis-bitbucket:8.13.1
pull_policy: always
volumes:
- artemis-bitbucket-data:/var/atlassian/application-data/bitbucket
Expand All @@ -44,7 +44,7 @@ services:
hostname: bamboo
extra_hosts:
- "host.docker.internal:host-gateway"
image: ghcr.io/ls1intum/artemis-bamboo:9.2.1
image: ghcr.io/ls1intum/artemis-bamboo:9.3.3
pull_policy: always
volumes:
- artemis-bamboo-data:/var/atlassian/application-data/bamboo
Expand All @@ -57,6 +57,12 @@ services:
- "8085"
networks:
- artemis
healthcheck:
test: curl -f http://localhost:8085/rest/api/latest/server | grep "<state>RUNNING</state>"
interval: 10s
timeout: 5s
start_period: 40s
retries: 120 # = 20 minutes startup time during setup

bamboo-build-agent:
container_name: artemis-bamboo-build-agent
Expand All @@ -74,6 +80,9 @@ services:
BAMBOO_SERVER: "http://bamboo:8085"
networks:
- artemis
depends_on:
bamboo:
condition: service_healthy

networks:
artemis:
Expand Down
3 changes: 2 additions & 1 deletion docs/dev/development-process.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ Naming Conventions for GitHub Pull Requests
1. The first term is a main feature of Artemis and is using code highlighting, e.g. “``Programming exercises``:”.

1. Possible feature tags are: ``Programming exercises``, ``Quiz exercises``, ``Modeling exercises``, ``Text exercises``, ``File upload exercises``, ``Exam mode``,
``Grading``, ``Assessment``, ``Communication``, ``Notifications``, ``Team exercises``, ``Lectures``, ``Plagiarism checks``, ``Learning analytics``, ``Adaptive learning``, ``Tutorial groups``.
``Grading``, ``Assessment``, ``Communication``, ``Notifications``, ``Team exercises``, ``Lectures``, ``Plagiarism checks``, ``Learning analytics``,
``Adaptive learning``, ``Tutorial groups``, ``Iris``.
2. If the change is not visible to end users, or it is a pure development or test improvement, we use the term “``Development``:”.
3. Everything else belongs to the ``General`` category.

Expand Down
4 changes: 2 additions & 2 deletions docs/dev/setup/bamboo-bitbucket-jira.rst
Original file line number Diff line number Diff line change
Expand Up @@ -369,8 +369,8 @@ Configure Artemis
server:
port: 8080 # The port of artemis
url: http://172.20.0.1:8080 # needs to be an ip
// url: http://docker.for.mac.host.internal:8080 # If the above one does not work for mac try this one
// url: http://host.docker.internal:8080 # If the above one does not work for windows try this one
# url: http://docker.for.mac.host.internal:8080 # If the above one does not work for mac try this one
# url: http://host.docker.internal:8080 # If the above one does not work for windows try this one
In addition, you have to start Artemis with the profiles ``bamboo``,
``bitbucket`` and ``jira`` so that the correct adapters will be used,
Expand Down
46 changes: 27 additions & 19 deletions docs/dev/setup/jenkins-gitlab.rst
Original file line number Diff line number Diff line change
Expand Up @@ -125,11 +125,16 @@ both are set up correctly and follow these steps:
INSERT INTO `artemis`.`jhi_user_authority` (`user_id`, `authority_name`) VALUES (1,"ROLE_ADMIN");
INSERT INTO `artemis`.`jhi_user_authority` (`user_id`, `authority_name`) VALUES (1,"ROLE_USER");
4. Create a user in Gitlab (``http://your-gitlab-domain/admin/users/new``) and make sure that the username,
email, and password are the same as the user from the database:
4. Create a user in Gitlab (``http://your-gitlab-domain/admin/users/new``) and make sure that the username and
email are the same as the user from the database:

.. figure:: setup/jenkins-gitlab/gitlab_admin_user.png

5. Edit the new admin user (``http://your-gitlab-domain/admin/users/artemis_admin/edit``) to set the password to the
same value as in the database:

.. figure:: setup/jenkins-gitlab/gitlab_admin_user_password.png

Starting the Artemis server should now succeed.

GitLab
Expand Down Expand Up @@ -188,9 +193,9 @@ tokens instead of the predefined ones.

::

docker compose -f docker/<Jenkins setup to be launched>.yml exec gitlab gitlab-rails runner "token = User.find_by_username('root').personal_access_tokens.create(scopes: [:api, :read_user, :read_api, :read_repository, :write_repository, :sudo], name: 'Artemis Admin Token'); token.set_token('artemis-gitlab-token'); token.save!"
docker compose -f docker/<Jenkins setup to be launched>.yml exec gitlab gitlab-rails runner "token = User.find_by_username('root').personal_access_tokens.create(scopes: ['api', 'read_api', 'read_user', 'read_repository', 'write_repository', 'sudo'], name: 'Artemis Admin Token', expires_at: 365.days.from_now); token.set_token('artemis-gitlab-token'); token.save!"

| You can also manually create in by navigating to ``http://localhost:8081/-/profile/personal_access_tokens`` and
| You can also manually create in by navigating to ``http://localhost:8081/-/profile/personal_access_tokens?name=Artemis+Admin+token&scopes=api,read_api,read_user,read_repository,write_repository,sudo`` and
generate a token with all scopes.
| Copy this token into the ``ADMIN_PERSONAL_ACCESS_TOKEN`` field in the
``docker/gitlab/gitlab-local-setup.sh`` file.
Expand Down Expand Up @@ -325,7 +330,7 @@ GitLab Access Token
.. figure:: setup/jenkins-gitlab/gitlab_access_tokens_button.png
:align: center

10. Create a new token named “Artemis” and give it **all** rights.
10. Create a new token named “Artemis” and give it rights ``api``, ``read_api``, ``read_user``, ``read_repository``, ``write_repository``, and ``sudo``.

.. figure:: setup/jenkins-gitlab/artemis_gitlab_access_token.png
:align: center
Expand Down Expand Up @@ -469,7 +474,7 @@ do either do it manually or using the following command:

::

docker compose -f docker/<Jenkins setup to be launched>.yml exec gitlab gitlab-rails runner "token = User.find_by_username('root').personal_access_tokens.create(scopes: [:api, :read_repository], name: 'Jenkins'); token.set_token('jenkins-gitlab-token'); token.save!"
docker compose -f docker/<Jenkins setup to be launched>.yml exec gitlab gitlab-rails runner "token = User.find_by_username('root').personal_access_tokens.create(scopes: ['api', 'read_repository'], name: 'Jenkins', expires_at: 365.days.from_now); token.set_token('jenkins-gitlab-token'); token.save!"



Expand Down Expand Up @@ -746,7 +751,7 @@ Choose “Download now and install after restart” and checking the
Timestamper Configuration
"""""""""""""""""""""""""

Go to *Manage Jenkins → Configure System*. There you will find the
Go to *Manage Jenkins → System Configuration → Configure*. There you will find the
Timestamper configuration, use the following value for both formats:

::
Expand All @@ -767,16 +772,16 @@ JUnit formatted results to any URL.
You can download the current release of the plugin
`here <https://github.com/ls1intum/jenkins-server-notification-plugin/releases>`__
(Download the **.hpi** file). Go to the Jenkins plugin page (*Manage
Jenkins → Manage Plugins*) and install the downloaded file under the
*Advanced* tab under *Upload Plugin*
Jenkins → System Configuration → Plugins*) and install the downloaded file under the
*Advanced settings* tab under *Deploy Plugin*

.. figure:: setup/jenkins-gitlab/jenkins_custom_plugin.png
:align: center

Jenkins Credentials
"""""""""""""""""""

Go to *Manage Jenkins -> Security -> Manage Credentials → Jenkins → Global credentials* and create the
Go to *Manage Jenkins Security Credentials → Jenkins → Global credentials* and create the
following credentials

GitLab API Token
Expand All @@ -798,7 +803,7 @@ GitLab API Token
4. Leave the ID field blank
5. The description is up to you

3. Go to the Jenkins settings *Manage Jenkins → Configure System*. There
3. Go to the Jenkins settings *Manage Jenkins → System*. There
you will find the GitLab settings. Fill in the URL of your GitLab
instance and select the just created API token in the credentials
dropdown. After you click on “Test Connection”, everything should
Expand Down Expand Up @@ -1013,7 +1018,8 @@ You can either run the builds locally (that means on the machine that hosts Jenk
Configuring local build agents
""""""""""""""""""""""""""""""

Go to `Manage Jenkins` > `Manage Nodes and Clouds` > `master`
Go to `Manage Jenkins` → `Nodes` → `Built-In Node` → `Configure`

Configure your master node like this (adjust the number of executors, if needed). Make sure to add the docker label.

.. figure:: setup/jenkins-gitlab/jenkins_local_node.png
Expand Down Expand Up @@ -1071,26 +1077,28 @@ Add agent in Jenkins:

1. Open Jenkins in your browser (e.g. localhost:8082)

2. Go to Manage Jenkins -> Manage Credentials -> (global) -> Add Credentials
2. Go to Manage Jenkins Credentials → System → Global credentials (unrestricted) → Add Credentials

- Kind: SSH Username with private key

- Scope: Global (Jenkins, nodes, items, all child items, etc)

- ID: leave blank

- Description: Up to you

- Username: jenkins

- Private Key: <content of the previous generated private key> (e.g /root/.ssh/id_rsa)
- Private Key: <content of the previously generated private key> (e.g /root/.ssh/id_rsa)

- Passphrase: <the previous entered passphrase> (you can leave it blank if none has been specified)
- Passphrase: <the previously entered passphrase> (you can leave it blank if none has been specified)

.. figure:: setup/jenkins-gitlab/alternative_jenkins_node_credentials.png
:align: center

3. Go to Manage Jenkins -> Manage Nodes and Clouds -> New Node
3. Go to Manage Jenkins Nodes New Node

- Node name: Up to you (e.g. Docker)
- Node name: Up to you (e.g. Docker agent node)

- Check 'Permanent Agent'

Expand Down Expand Up @@ -1223,10 +1231,10 @@ access control in Jenkins.
This enables specific Artemis users to access build plans and execute actions such as triggering a build.
This section explains the changes required in Jenkins in order to set up build plan access control:

1. Navigate to Manage Jenkins -> Manage Plugins -> Installed and make sure that you have the
1. Navigate to Manage Jenkins Plugins Installed plugins and make sure that you have the
`Matrix Authorization Strategy <https://plugins.jenkins.io/matrix-auth/>`__ plugin installed

2. Navigate to Manage Jenkins -> Configure Global Security and navigate to the "Authorization" section
2. Navigate to Manage Jenkins Security and navigate to the "Authorization" section

3. Select the "Project-based Matrix Authorization Strategy" option

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/alternative_jenkins_node_setup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/artemis_gitlab_access_token.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/gitlab_access_tokens_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/gitlab_admin_user.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/gitlab_jenkins_token_rights.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/gitlab_preferences_button.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/jenkins_custom_plugin.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/jenkins_gitlab_configuration.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/jenkins_local_node.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/jenkins_master_node.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/jenkins_node.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/jenkins_ssh_credentials.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/jenkins_test_project.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/dev/setup/jenkins-gitlab/timestamper_config.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 15 additions & 1 deletion docs/user/exams/instructors_guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -451,10 +451,23 @@ If you want you can also enable the :ref:`second correction <Before the exam's a

- At the bottom of the page you will find the option |check_plagiarism|.

3.4 Exam Timeline
^^^^^^^^^^^^^^^^^
- Artemis stores the current state of a submission for text, modeling, and quiz exercises every 30s or whenever the student clicks the save button.
- As instructor, you have the possibility to view all those states as well as the submissions for file-upload or programming exercises using the exam timeline.
- The exam timeline is available on the details page of a student exam when the student exam has been submitted by clicking on the button |exam_timeline|. If the exam has not been submitted yet, the exam timeline button is disabled and shows an explanatory tooltip.
- The exam timeline shows all submissions of the student in chronological order. You can navigate between the different timestamps on the slider or navigate between different exercises using the navigation bar below the timeline
- For programming exercises, you can view a git diff between the currently selected submission and the previous submission or the template of this exercise.

.. figure:: instructor/exam_timeline_example.png
:alt: Exam timeline
:align: center



.. _exam_grading_key:

3.4 Grading Key
3.5 Grading Key
^^^^^^^^^^^^^^^
- Optionally, you can create a grading key for your exam by clicking |grade_key| at the top of the exam's detail page.
- Defining a grading key allows the exam score to be converted to a grade automatically by Artemis, students are then able to see their own grades after the specified `Release Date of Results`.
Expand Down Expand Up @@ -567,6 +580,7 @@ Artemis collects the complaints submitted by the students during the :ref:`stude
.. |assess_test_runs| image:: instructor/buttons/assess_test_runs.png
.. |assess_unsubmitted_student_exams| image:: instructor/buttons/assess_unsubmitted_student_exams.png
.. |check_plagiarism| image:: instructor/buttons/check_plagiarism.png
.. |exam_timeline| image:: instructor/buttons/exam_timeline.png
.. |configure_grading| image:: instructor/buttons/configure_grading.png
.. |course_management| image:: instructor/buttons/course_management.png
.. |create_new_exam| image:: instructor/buttons/create_new_exam.png
Expand Down
Loading

0 comments on commit e042540

Please sign in to comment.