mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
Compare commits
7 Commits
copilot/fi
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a350f5629 | ||
|
|
c29c7c0853 | ||
| 33120c40a5 | |||
| 2ec3d9349e | |||
| 5e088fb4eb | |||
| 58175c1426 | |||
| 03529f875a |
11
.github/workflows/docker-deploy.yml
vendored
11
.github/workflows/docker-deploy.yml
vendored
@@ -2,7 +2,7 @@ name: Deploy to Docker Hub
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ main, development, staging ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
@@ -21,8 +21,11 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Make build script executable
|
- name: Extract branch name
|
||||||
run: chmod +x ./build.sh
|
shell: bash
|
||||||
|
run: echo "BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
run: ./build.sh -t -p
|
run: |
|
||||||
|
chmod +x ./build.sh
|
||||||
|
./build.sh -t -p -b "$BRANCH_NAME"
|
||||||
81
build.sh
81
build.sh
@@ -3,11 +3,12 @@
|
|||||||
MAJOR_VERSION="3"
|
MAJOR_VERSION="3"
|
||||||
MINOR_VERSION="0"
|
MINOR_VERSION="0"
|
||||||
VERSION="$MAJOR_VERSION.$MINOR_VERSION"
|
VERSION="$MAJOR_VERSION.$MINOR_VERSION"
|
||||||
|
BRANCH=""
|
||||||
|
|
||||||
TAG_FLAG=false
|
TAG_FLAG=false
|
||||||
PUSH_FLAG=false
|
PUSH_FLAG=false
|
||||||
|
|
||||||
while getopts ":tp" opt; do
|
while getopts ":tpb:" opt; do
|
||||||
case ${opt} in
|
case ${opt} in
|
||||||
t)
|
t)
|
||||||
TAG_FLAG=true
|
TAG_FLAG=true
|
||||||
@@ -15,9 +16,12 @@ while getopts ":tp" opt; do
|
|||||||
p)
|
p)
|
||||||
PUSH_FLAG=true
|
PUSH_FLAG=true
|
||||||
;;
|
;;
|
||||||
|
b)
|
||||||
|
BRANCH="$OPTARG"
|
||||||
|
;;
|
||||||
\?)
|
\?)
|
||||||
echo "Invalid option: -$OPTARG" >&2
|
echo "Invalid option: -$OPTARG" >&2
|
||||||
echo "Usage: $0 [-t] [-p]"
|
echo "Usage: $0 [-t] [-p] [-b branch]"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -29,17 +33,54 @@ docker build -t canvas_management:$VERSION .
|
|||||||
|
|
||||||
if [ "$TAG_FLAG" = true ]; then
|
if [ "$TAG_FLAG" = true ]; then
|
||||||
echo "Tagging images..."
|
echo "Tagging images..."
|
||||||
|
|
||||||
|
if [ -n "$BRANCH" ]; then
|
||||||
|
# Branch-specific tags
|
||||||
|
echo "alexmickelson/canvas_management:$VERSION-$BRANCH"
|
||||||
|
echo "alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
|
||||||
|
echo "alexmickelson/canvas_management:latest-$BRANCH"
|
||||||
|
|
||||||
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION-$BRANCH"
|
||||||
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION-$BRANCH"
|
||||||
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:latest-$BRANCH
|
||||||
|
|
||||||
|
# Only create non-branch tags if branch is "main"
|
||||||
|
if [ "$BRANCH" = "main" ]; then
|
||||||
echo "alexmickelson/canvas_management:$VERSION"
|
echo "alexmickelson/canvas_management:$VERSION"
|
||||||
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
|
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
echo "alexmickelson/canvas_management:latest"
|
echo "alexmickelson/canvas_management:latest"
|
||||||
|
|
||||||
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION"
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION"
|
||||||
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION"
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION"
|
||||||
docker image tag canvas_management:latest alexmickelson/canvas_management:latest
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:latest
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# No branch specified - create standard tags (for local development)
|
||||||
|
echo "alexmickelson/canvas_management:$VERSION"
|
||||||
|
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
|
echo "alexmickelson/canvas_management:latest"
|
||||||
|
|
||||||
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$VERSION"
|
||||||
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:"$MAJOR_VERSION"
|
||||||
|
docker image tag canvas_management:"$VERSION" alexmickelson/canvas_management:latest
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$PUSH_FLAG" = true ]; then
|
if [ "$PUSH_FLAG" = true ]; then
|
||||||
echo "Pushing images..."
|
echo "Pushing images..."
|
||||||
|
|
||||||
|
if [ -n "$BRANCH" ]; then
|
||||||
|
# Push branch-specific tags
|
||||||
|
echo "alexmickelson/canvas_management:$VERSION-$BRANCH"
|
||||||
|
echo "alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
|
||||||
|
echo "alexmickelson/canvas_management:latest-$BRANCH"
|
||||||
|
|
||||||
|
docker push alexmickelson/canvas_management:"$VERSION-$BRANCH"
|
||||||
|
docker push alexmickelson/canvas_management:"$MAJOR_VERSION-$BRANCH"
|
||||||
|
docker push alexmickelson/canvas_management:latest-$BRANCH
|
||||||
|
|
||||||
|
# Only push non-branch tags if branch is "main"
|
||||||
|
if [ "$BRANCH" = "main" ]; then
|
||||||
echo "alexmickelson/canvas_management:$VERSION"
|
echo "alexmickelson/canvas_management:$VERSION"
|
||||||
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
|
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
echo "alexmickelson/canvas_management:latest"
|
echo "alexmickelson/canvas_management:latest"
|
||||||
@@ -47,6 +88,17 @@ if [ "$PUSH_FLAG" = true ]; then
|
|||||||
docker push alexmickelson/canvas_management:"$VERSION"
|
docker push alexmickelson/canvas_management:"$VERSION"
|
||||||
docker push alexmickelson/canvas_management:"$MAJOR_VERSION"
|
docker push alexmickelson/canvas_management:"$MAJOR_VERSION"
|
||||||
docker push alexmickelson/canvas_management:latest
|
docker push alexmickelson/canvas_management:latest
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# No branch specified - push standard tags (for local development)
|
||||||
|
echo "alexmickelson/canvas_management:$VERSION"
|
||||||
|
echo "alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
|
echo "alexmickelson/canvas_management:latest"
|
||||||
|
|
||||||
|
docker push alexmickelson/canvas_management:"$VERSION"
|
||||||
|
docker push alexmickelson/canvas_management:"$MAJOR_VERSION"
|
||||||
|
docker push alexmickelson/canvas_management:latest
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$TAG_FLAG" = false ] && [ "$PUSH_FLAG" = false ]; then
|
if [ "$TAG_FLAG" = false ] && [ "$PUSH_FLAG" = false ]; then
|
||||||
@@ -54,12 +106,33 @@ if [ "$TAG_FLAG" = false ] && [ "$PUSH_FLAG" = false ]; then
|
|||||||
echo "Build complete."
|
echo "Build complete."
|
||||||
echo "To tag, run with -t flag."
|
echo "To tag, run with -t flag."
|
||||||
echo "To push, run with -p flag."
|
echo "To push, run with -p flag."
|
||||||
|
echo "To build for a specific branch, use -b branch_name flag."
|
||||||
echo "Or manually run:"
|
echo "Or manually run:"
|
||||||
echo ""
|
echo ""
|
||||||
|
if [ -n "$BRANCH" ]; then
|
||||||
|
echo "# Branch-specific tags:"
|
||||||
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION-$BRANCH"
|
||||||
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
|
||||||
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:latest-$BRANCH"
|
||||||
|
echo "docker push alexmickelson/canvas_management:$VERSION-$BRANCH"
|
||||||
|
echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION-$BRANCH"
|
||||||
|
echo "docker push alexmickelson/canvas_management:latest-$BRANCH"
|
||||||
|
if [ "$BRANCH" = "main" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "# Main branch also gets standard tags:"
|
||||||
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION"
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION"
|
||||||
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION"
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
echo "docker image tag canvas_management:latest alexmickelson/canvas_management:latest"
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:latest"
|
||||||
echo "docker push alexmickelson/canvas_management:$VERSION"
|
echo "docker push alexmickelson/canvas_management:$VERSION"
|
||||||
echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION"
|
echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
echo "docker push alexmickelson/canvas_management:latest"
|
echo "docker push alexmickelson/canvas_management:latest"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$VERSION"
|
||||||
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
|
echo "docker image tag canvas_management:$VERSION alexmickelson/canvas_management:latest"
|
||||||
|
echo "docker push alexmickelson/canvas_management:$VERSION"
|
||||||
|
echo "docker push alexmickelson/canvas_management:$MAJOR_VERSION"
|
||||||
|
echo "docker push alexmickelson/canvas_management:latest"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -19,3 +19,5 @@ courses:
|
|||||||
name: Jonathan UX
|
name: Jonathan UX
|
||||||
- path: ./1400/2025_spring_alex/modules/
|
- path: ./1400/2025_spring_alex/modules/
|
||||||
name: 1400-spring
|
name: 1400-spring
|
||||||
|
- path: ./1420/2024-fall/Modules/
|
||||||
|
name: 1420_old
|
||||||
|
|||||||
@@ -55,6 +55,22 @@ flowchart TD
|
|||||||
C -->|Three| F[fa:fa-car Car]
|
C -->|Three| F[fa:fa-car Car]
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
|
## LaTeX Math
|
||||||
|
|
||||||
|
**Inline math:** The Fibonacci sequence is defined as: \$F(n) = F(n-1) + F(n-2)\$ where \$F(0) = 0\$ and \$F(1) = 1\$.
|
||||||
|
|
||||||
|
**Block math:**
|
||||||
|
\$\$F(n) = F(n-1) + F(n-2)\$\$
|
||||||
|
|
||||||
|
**Complex equations:**
|
||||||
|
\$\$
|
||||||
|
F(n) = \\begin{cases}
|
||||||
|
0 & \\text{if } n = 0 \\\\
|
||||||
|
1 & \\text{if } n = 1 \\\\
|
||||||
|
F(n-1) + F(n-2) & \\text{if } n > 1
|
||||||
|
\\end{cases}
|
||||||
|
\$\$
|
||||||
|
|
||||||
## github classroom links will be replaced by the GithubClassroomAssignmentShareLink setting
|
## github classroom links will be replaced by the GithubClassroomAssignmentShareLink setting
|
||||||
|
|
||||||
[Github Classroom](insert_github_classroom_url)
|
[Github Classroom](insert_github_classroom_url)
|
||||||
|
|||||||
@@ -12,11 +12,13 @@ import { Spinner } from "@/components/Spinner";
|
|||||||
import MeatballIcon from "./MeatballIcon";
|
import MeatballIcon from "./MeatballIcon";
|
||||||
import { useSetAssignmentGroupsMutation } from "@/features/canvas/hooks/canvasCourseHooks";
|
import { useSetAssignmentGroupsMutation } from "@/features/canvas/hooks/canvasCourseHooks";
|
||||||
import { baseCanvasUrl } from "@/features/canvas/services/canvasServiceUtils";
|
import { baseCanvasUrl } from "@/features/canvas/services/canvasServiceUtils";
|
||||||
|
import Modal, { useModal } from "@/components/Modal";
|
||||||
|
|
||||||
export default function AssignmentGroupManagement() {
|
export default function AssignmentGroupManagement() {
|
||||||
const { data: settings, isPending } = useLocalCourseSettingsQuery();
|
const { data: settings, isPending } = useLocalCourseSettingsQuery();
|
||||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||||
const applyInCanvas = useSetAssignmentGroupsMutation(settings.canvasId);
|
const applyInCanvas = useSetAssignmentGroupsMutation(settings.canvasId);
|
||||||
|
const modal = useModal();
|
||||||
|
|
||||||
const [assignmentGroups, setAssignmentGroups] = useState<
|
const [assignmentGroups, setAssignmentGroups] = useState<
|
||||||
LocalAssignmentGroup[]
|
LocalAssignmentGroup[]
|
||||||
@@ -104,17 +106,46 @@ export default function AssignmentGroupManagement() {
|
|||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div className="flex justify-end">
|
<div className="flex justify-end">
|
||||||
|
<Modal
|
||||||
|
modalControl={modal}
|
||||||
|
buttonText="Update Assignment Groups In Canvas"
|
||||||
|
buttonClass="btn-"
|
||||||
|
modalWidth="w-1/5"
|
||||||
|
>
|
||||||
|
{({ closeModal }) => (
|
||||||
|
<div>
|
||||||
|
<div className="text-center font-bold">
|
||||||
|
DANGER: updating assignment groups can delete assignments and grades from canvas.
|
||||||
|
</div>
|
||||||
|
<div className="text-center">
|
||||||
|
This is only recommended to do at the beginning of a semester. Are you sure you want to continue?
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<div className="flex justify-around gap-3">
|
||||||
<button
|
<button
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
const newSettings = await applyInCanvas.mutateAsync(settings);
|
const newSettings = await applyInCanvas.mutateAsync(
|
||||||
|
settings
|
||||||
|
);
|
||||||
|
|
||||||
// prevent debounce from resetting
|
// prevent debounce from resetting
|
||||||
if (newSettings) setAssignmentGroups(newSettings.assignmentGroups);
|
if (newSettings)
|
||||||
|
setAssignmentGroups(newSettings.assignmentGroups);
|
||||||
}}
|
}}
|
||||||
disabled={applyInCanvas.isPending}
|
disabled={applyInCanvas.isPending}
|
||||||
|
className="btn-danger"
|
||||||
>
|
>
|
||||||
Update Assignment Groups In Canvas
|
Yes
|
||||||
</button>
|
</button>
|
||||||
|
<button onClick={closeModal} disabled={applyInCanvas.isPending}>
|
||||||
|
No
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{applyInCanvas.isPending && <Spinner />}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</Modal>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{applyInCanvas.isPending && <Spinner />}
|
{applyInCanvas.isPending && <Spinner />}
|
||||||
{applyInCanvas.isSuccess && (
|
{applyInCanvas.isSuccess && (
|
||||||
|
|||||||
Reference in New Issue
Block a user