mirror of
https://github.com/kjanat/articulate-parser.git
synced 2026-01-16 09:02:10 +01:00
Add Docker support and GitHub Container Registry CI workflow (#3)
* Add comprehensive Docker support with multi-stage builds * Set up GitHub Container Registry integration * Enhance CI/CD workflows with Docker build and push capabilities * Add --help and --version flags to main application * Update documentation with Docker usage examples * Implement security best practices for container deployment
This commit is contained in:
131
README.md
131
README.md
@ -10,6 +10,9 @@ A Go-based parser that converts Articulate Rise e-learning content to various fo
|
||||
[][Commits]
|
||||
[][Issues]
|
||||
[][Build]
|
||||
[][Docker workflow]
|
||||
[][Docker image]
|
||||
[][Docker image]
|
||||
[][Codecov]
|
||||
|
||||
## System Architecture
|
||||
@ -101,7 +104,7 @@ The system follows **Clean Architecture** principles with clear separation of co
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Go, I don't know the version, but I use go1.24.2 right now, and it works, see the [CI][Build] workflow where it is tested.
|
||||
- Go, I don't know the version, but I have [][gomod] configured right now, and it works, see the [CI][Build] workflow where it is tested.
|
||||
|
||||
### Install from source
|
||||
|
||||
@ -200,6 +203,130 @@ Then run:
|
||||
./articulate-parser input.json md output.md
|
||||
```
|
||||
|
||||
## Docker
|
||||
|
||||
The application is available as a Docker image from GitHub Container Registry.
|
||||
|
||||
### 🐳 Docker Image Information
|
||||
|
||||
- **Registry**: `ghcr.io/kjanat/articulate-parser`
|
||||
- **Platforms**: linux/amd64, linux/arm64
|
||||
- **Base Image**: Scratch (minimal footprint)
|
||||
- **Size**: ~15-20MB compressed
|
||||
|
||||
### Quick Start
|
||||
|
||||
```bash
|
||||
# Pull the latest image
|
||||
docker pull ghcr.io/kjanat/articulate-parser:latest
|
||||
|
||||
# Show help
|
||||
docker run --rm ghcr.io/kjanat/articulate-parser:latest --help
|
||||
```
|
||||
|
||||
### Available Tags
|
||||
|
||||
| Tag | Description | Use Case |
|
||||
|-----|-------------|----------|
|
||||
| `latest` | Latest stable release from master branch | Production use |
|
||||
| `edge` | Latest development build from master branch | Testing new features |
|
||||
| `v1.x.x` | Specific version releases | Production pinning |
|
||||
| `develop` | Development branch builds | Development/testing |
|
||||
| `feature/docker-ghcr` | Feature branch builds | Feature testing |
|
||||
| `master` | Latest master branch build | Continuous integration |
|
||||
|
||||
### Usage Examples
|
||||
|
||||
#### Process a local file
|
||||
|
||||
```bash
|
||||
# Mount current directory and process a local JSON file
|
||||
docker run --rm -v $(pwd):/workspace \
|
||||
ghcr.io/kjanat/articulate-parser:latest \
|
||||
/workspace/input.json markdown /workspace/output.md
|
||||
```
|
||||
|
||||
#### Process from URL
|
||||
|
||||
```bash
|
||||
# Mount output directory and process from Articulate Rise URL
|
||||
docker run --rm -v $(pwd):/workspace \
|
||||
ghcr.io/kjanat/articulate-parser:latest \
|
||||
"https://rise.articulate.com/share/xyz" docx /workspace/output.docx
|
||||
```
|
||||
|
||||
#### Export to different formats
|
||||
|
||||
```bash
|
||||
# Export to HTML
|
||||
docker run --rm -v $(pwd):/workspace \
|
||||
ghcr.io/kjanat/articulate-parser:latest \
|
||||
/workspace/course.json html /workspace/course.html
|
||||
|
||||
# Export to Word Document
|
||||
docker run --rm -v $(pwd):/workspace \
|
||||
ghcr.io/kjanat/articulate-parser:latest \
|
||||
/workspace/course.json docx /workspace/course.docx
|
||||
|
||||
# Export to Markdown
|
||||
docker run --rm -v $(pwd):/workspace \
|
||||
ghcr.io/kjanat/articulate-parser:latest \
|
||||
/workspace/course.json md /workspace/course.md
|
||||
```
|
||||
|
||||
#### Batch Processing
|
||||
|
||||
```bash
|
||||
# Process multiple files in a directory
|
||||
docker run --rm -v $(pwd):/workspace \
|
||||
ghcr.io/kjanat/articulate-parser:latest \
|
||||
bash -c "for file in /workspace/*.json; do
|
||||
/articulate-parser \"\$file\" md \"\${file%.json}.md\"
|
||||
done"
|
||||
```
|
||||
|
||||
### Docker Compose
|
||||
|
||||
For local development, you can use the provided `docker-compose.yml`:
|
||||
|
||||
```bash
|
||||
# Build and run with default help command
|
||||
docker-compose up articulate-parser
|
||||
|
||||
# Process files using mounted volumes
|
||||
docker-compose up parser-with-files
|
||||
```
|
||||
|
||||
### Building Locally
|
||||
|
||||
```bash
|
||||
# Build the Docker image locally
|
||||
docker build -t articulate-parser:local .
|
||||
|
||||
# Run the local image
|
||||
docker run --rm articulate-parser:local --help
|
||||
|
||||
# Build with specific version
|
||||
docker build --build-arg VERSION=local --build-arg BUILD_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ) -t articulate-parser:local .
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
|
||||
The Docker image supports the following build-time arguments:
|
||||
|
||||
| Argument | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `VERSION` | Version string embedded in the binary | `dev` |
|
||||
| `BUILD_TIME` | Build timestamp | Current time |
|
||||
| `GIT_COMMIT` | Git commit hash | Current commit |
|
||||
|
||||
### Docker Security
|
||||
|
||||
- **Non-root execution**: The application runs as a non-privileged user
|
||||
- **Minimal attack surface**: Built from scratch base image
|
||||
- **No shell access**: Only the application binary is available
|
||||
- **Read-only filesystem**: Container filesystem is read-only except for mounted volumes
|
||||
|
||||
## Development
|
||||
|
||||
### Code Quality
|
||||
@ -329,6 +456,8 @@ This is a utility tool for educational content conversion. Please ensure you hav
|
||||
[Build]: https://github.com/kjanat/articulate-parser/actions/workflows/ci.yml
|
||||
[Codecov]: https://codecov.io/gh/kjanat/articulate-parser
|
||||
[Commits]: https://github.com/kjanat/articulate-parser/commits/master/
|
||||
[Docker workflow]: https://github.com/kjanat/articulate-parser/actions/workflows/docker.yml
|
||||
[Docker image]: https://github.com/kjanat/articulate-parser/pkgs/container/articulate-parser
|
||||
[Go report]: https://goreportcard.com/report/github.com/kjanat/articulate-parser
|
||||
[gomod]: go.mod
|
||||
[Issues]: https://github.com/kjanat/articulate-parser/issues
|
||||
|
||||
Reference in New Issue
Block a user