mirror of
https://github.com/kjanat/articulate-parser.git
synced 2026-01-16 07:42:09 +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:
54
main.go
54
main.go
@ -7,9 +7,11 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/kjanat/articulate-parser/internal/exporters"
|
||||
"github.com/kjanat/articulate-parser/internal/services"
|
||||
"github.com/kjanat/articulate-parser/internal/version"
|
||||
)
|
||||
|
||||
// main is the entry point of the application.
|
||||
@ -28,15 +30,23 @@ func run(args []string) int {
|
||||
exporterFactory := exporters.NewFactory(htmlCleaner)
|
||||
app := services.NewApp(parser, exporterFactory)
|
||||
|
||||
// Check for version flag
|
||||
if len(args) > 1 && (args[1] == "--version" || args[1] == "-v") {
|
||||
fmt.Printf("%s version %s\n", args[0], version.Version)
|
||||
fmt.Printf("Build time: %s\n", version.BuildTime)
|
||||
fmt.Printf("Git commit: %s\n", version.GitCommit)
|
||||
return 0
|
||||
}
|
||||
|
||||
// Check for help flag
|
||||
if len(args) > 1 && (args[1] == "--help" || args[1] == "-h" || args[1] == "help") {
|
||||
printUsage(args[0], app.GetSupportedFormats())
|
||||
return 0
|
||||
}
|
||||
|
||||
// Check for required command-line arguments
|
||||
if len(args) < 4 {
|
||||
fmt.Printf("Usage: %s <source> <format> <output>\n", args[0])
|
||||
fmt.Printf(" source: URI or file path to the course\n")
|
||||
fmt.Printf(" format: export format (%s)\n", joinStrings(app.GetSupportedFormats(), ", "))
|
||||
fmt.Printf(" output: output file path\n")
|
||||
fmt.Println("\nExample:")
|
||||
fmt.Printf(" %s articulate-sample.json markdown output.md\n", args[0])
|
||||
fmt.Printf(" %s https://rise.articulate.com/share/xyz docx output.docx\n", args[0])
|
||||
printUsage(args[0], app.GetSupportedFormats())
|
||||
return 1
|
||||
}
|
||||
|
||||
@ -73,25 +83,17 @@ func isURI(str string) bool {
|
||||
return len(str) > 7 && (str[:7] == "http://" || str[:8] == "https://")
|
||||
}
|
||||
|
||||
// joinStrings concatenates a slice of strings using the specified separator.
|
||||
// printUsage prints the command-line usage information.
|
||||
//
|
||||
// Parameters:
|
||||
// - strs: The slice of strings to join
|
||||
// - sep: The separator to insert between each string
|
||||
//
|
||||
// Returns:
|
||||
// - A single string with all elements joined by the separator
|
||||
func joinStrings(strs []string, sep string) string {
|
||||
if len(strs) == 0 {
|
||||
return ""
|
||||
}
|
||||
if len(strs) == 1 {
|
||||
return strs[0]
|
||||
}
|
||||
|
||||
result := strs[0]
|
||||
for i := 1; i < len(strs); i++ {
|
||||
result += sep + strs[i]
|
||||
}
|
||||
return result
|
||||
// - programName: The name of the program (args[0])
|
||||
// - supportedFormats: Slice of supported export formats
|
||||
func printUsage(programName string, supportedFormats []string) {
|
||||
fmt.Printf("Usage: %s <source> <format> <output>\n", programName)
|
||||
fmt.Printf(" source: URI or file path to the course\n")
|
||||
fmt.Printf(" format: export format (%s)\n", strings.Join(supportedFormats, ", "))
|
||||
fmt.Printf(" output: output file path\n")
|
||||
fmt.Println("\nExample:")
|
||||
fmt.Printf(" %s articulate-sample.json markdown output.md\n", programName)
|
||||
fmt.Printf(" %s https://rise.articulate.com/share/xyz docx output.docx\n", programName)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user