---
title: "Homework Submission"
subtitle: "GitHub Submission Guide"
sidebar: main
---

All homework assignments are submitted via GitHub through Gradescope.

## Repository Structure

::: {.callout-important}
Your repository **must be private**. Public repositories will not be graded.
:::

Organize your repository with one directory per problem:

```
README.md
q1/
q2/
q3/
...
```

Each problem directory (`q1/`, `q2/`, etc.) should contain all relevant files for that problem, including:

- Python scripts (`.py`)
- Dockerfiles
- Shell scripts (`build.sh`, `run.sh`, `test.sh`)
- Configuration files
- Sample data

::: {.callout-warning}
Submissions without a `README.md` file will NOT be graded.
:::

## File Formats

**Code**

- Python scripts: `.py`
- Shell scripts: `.sh` (must be executable)
- Dockerfiles: `Dockerfile`

**Configuration**

- Requirements: `requirements.txt`
- Docker Compose: `docker-compose.yaml`
- JSON/YAML configuration files

**Data files**

- JSON: `.json`
- Text: `.txt`, `.csv`
- Other formats as specified

## Dependencies and requirements.txt

If your code requires packages beyond the Python standard library, include a `requirements.txt` in the problem directory:

```
requests==2.31.0
flask==3.0.0
```

## README Requirements

Your repository **must** include a `README.md` file at the root. This file should:

- Your full name and student ID
- Briefly describe the submission
- List files in each problem directory
- Note any dependencies beyond standard course requirements

The README should be concise. Do not pad with excessive commentary.

### Example README

```markdown
# EE 547 Homework 1
Author: Jane Doe
Student ID: 1234567890

## Contents
q1/
├── fetch_and_process.py
├── Dockerfile
├── build.sh
└── run.sh
q2/
├── server.py
├── Dockerfile
├── docker-compose.yml
├── build.sh
└── run.sh
q3/
├── pipeline.py
├── Dockerfile
└── docker-compose.yml
```

You may include additional files (e.g., intermediate outputs, extra visualizations), but only files listed in the README will be reviewed and scored. TAs will not search or hunt for unlisted files.

See [Syllabus](/syllabus.qmd) for grading policies.

## Submitting to Gradescope

1. Push your completed work to your GitHub repository
2. Open the assignment on [Gradescope](https://gradescope.com)
3. Select **GitHub** as the submission method
4. Connect your GitHub account if prompted (first time only)
5. Select your repository and branch
6. Submit

You may resubmit multiple times before the deadline. Only your last submission will be graded.

::: {.callout-note}
You must link your GitHub account directly on [gradescope.com](https://gradescope.com), not through Brightspace. If you have trouble connecting, log into Gradescope directly and try again.
:::

See [Gradescope: Submitting a Code Assignment](https://guides.gradescope.com/hc/en-us/articles/21865616724749-Submitting-a-Code-assignment) for detailed instructions with screenshots.

::: {.callout-tip}
## Testing Your Submission
Before submitting, ensure:

1. All Docker builds complete without errors
2. All shell scripts are executable (`chmod +x *.sh`)
3. Python scripts run without errors using Python 3.11+
4. Output formats (JSON, etc.) match specifications exactly
5. Your repository structure matches the assignment requirements
:::
