(projects []*Project)
| 737 | } |
| 738 | |
| 739 | func renderProjects(projects []*Project) error { |
| 740 | for _, p := range projects { |
| 741 | projectDir := filepath.Join(outDir, p.CategorySlug, p.Slug) |
| 742 | if err := mkdirAll(projectDir); err != nil { |
| 743 | return fmt.Errorf("create project dir %s: %w", projectDir, err) |
| 744 | } |
| 745 | |
| 746 | projectFile := filepath.Join(projectDir, "index.html") |
| 747 | |
| 748 | buf := bytes.NewBuffer(nil) |
| 749 | if err := tpl.Lookup("project.tmpl.html").Execute(buf, p); err != nil { |
| 750 | return fmt.Errorf("render project %s: %w", p.Slug, err) |
| 751 | } |
| 752 | |
| 753 | doc, err := goquery.NewDocumentFromReader(buf) |
| 754 | if err != nil { |
| 755 | return fmt.Errorf("goquery for project %s: %w", p.Slug, err) |
| 756 | } |
| 757 | |
| 758 | html, err := doc.Html() |
| 759 | if err != nil { |
| 760 | return fmt.Errorf("html for project %s: %w", p.Slug, err) |
| 761 | } |
| 762 | |
| 763 | if err := os.WriteFile(projectFile, []byte(html), 0644); err != nil { |
| 764 | return fmt.Errorf("write project file %s: %w", p.Slug, err) |
| 765 | } |
| 766 | } |
| 767 | |
| 768 | fmt.Printf("Rendered %d project pages\n", len(projects)) |
| 769 | return nil |
| 770 | } |
no test coverage detected