Guerilla Coding
A Website build for my Projects.

Die Website soll als Portfolio für meine privaten Projekte dienen. Ich selbst bin kein großer Schreiber, deshalb wird sie automatisch aus meinem Gitlab aufgebaut. Sie selbst dient auch gleich als Projekt, um meine Kenntnis in Symfony zu erweitern und mehr Erfahrung mit c# zu bekommen.
Warum C# 😀 siehe.

Kontakt

Alexander Malk
E-Mail: alex@guerilla-coding.com

Details

Es gibt derzeit 11 Projekte in 3 Kategorien. Das zuletzt Aktualisierte Project ist TD Service Sitespeed in der Kategorie NPM und es wurde am 19.01.2024 aktualisiert.
Es warten z.Zt. noch ca. 2 Projekte eingefügt zu werden.

Gitlab/Folder Exporter

Der "Gitlab/Folder Exporter" ist ein Teil dieser Website. Er extrahiert Projekte aus Gitlab und aus Ordnern und schreibt den inhalt in eine MySQL DB und in einen vorher definierten Ordner.

Das ist die erste Version und deshalb noch sehr auf meinen Bedarf zugeschnitten. Aber es werden Updates folgen siehe ToDo

Ablauf (Gitlab)

Ablauf

Abhängigkeiten

  • .NET SDK 6
  • Docker (optional)

NuGet Pakete

  • Markdig 0.30.2
  • MySqlConnector 2.1.9
  • Newtonsoft.Json 13.0.1
  • YamlDotNet 11.2.1

Config

Parameter Beschreibung
options_file Der Dateiname in der die Optionen für das Projekt liegen. Beispiel options.json
public_file Der Dateiname ohne Endung in dem sich der MD/HTML Content befindet.
html_output Der Ordner in dem die HTMl Dateien abgelegt werden sollen.
media_output Der Ordner in dem die Media Dateien abgelegt werden sollen.
media_path Die relative URL in dem die Media Dateien liegen. Beispiel: /Projects/{project_alias_name}. In Markdown Dateien muss der Pfad zu Media Dateien so aussehen "{media_path}/ablauf.png".
mysql_string Der MySQL Connection String

sources

Es gibt z.Zt. 2 Typen von Sources (Quellen)

Source Gitlab

Parameter Beschreibung
type Hier ist nur "gitlab" erlaubt
path Protokoll und Host zur Gitlab Instanz.
token Der Token um die API zu verwenden.
public_folder Dieser Ordner muss in jedem Repository befinden und beinhalten den teil für die Website.

Source Ordner

Parameter Beschreibung
type Hier ist nur "folder" erlaubt.
path Der absolute Pfad zum Ordner.
public_folder (Optional) Mit diesem Wert ist es möglich nur ein Projekt anzugeben. Das Program würde im "path" nur nach diesem Ordner suchen. siehe Ordner

Quellen

Options.json

Der großteil der Werte wird in der MySQL DB gespeichert und muss vorhanden sein.

Parameter Beschreibung
type Gibt an was für eine Datei hinterlegt wurde die für die Website etc. genutzt wird. Die passenden Werte sind hier html oder markdown.
cloneable Der Parameter wird derzeit nicht verwendet aber er wird benötigt. Beispiel false
project_name Der Name des Projekts.
project_alias_name Der Pfad der für die Website genutzt werden kann.
category Die Kategorie des Projekts. Muss vorher in der MySQL DB definiert worden sein.
preview_image Der Name der Vorschau Datei. Muss im Media Ordner liegen.
preview_text Der Vorschau Text für z.B. die Website.
prod Soll das Projekt auf der Produktivumgebung gezeigt werden. Eine 1 für ja und 0 für nein.
tags Sollen Tags als ZIP geladen und an den HTMl teil angehangen werden. Beispiel: true
build_job_name (Optional) Wenn Tags true ist und dieser Wert gesetzt ist wird die artifacts zip Datei vom Tag genommen.

Gitlab

Im Repository Ordner muss sich ein Ordner befinden der im Parameter "public_folder" definiert wurde. In dem Ordner muss sich ein "media" Ordner eine Markdown/HTMl Datei und eine options.json befinden.

Ordner

Der Ordner ist aufgebaut wie Gitlab. Die Besonderheit hier ist eher der Parameter "public_folder". Ohne den Parameter würde das Programm alle Unterordner von z.B. /home/alex als Projekt erkennen und benötigt kein "public_folder". Wenn man "public_folder" angibt, wird /home/alex als Projekt gesehen und benötigt auch den "public_folder".

Docker

benötigte Mounts

Mountpoint Beschreibung
/app/config.yml Der Pfad zur Config Datei.
/out/media Wo die Media Dateien gespeichert werden sollen.
/out/html Wo die HTML Dateien gespeichert werden sollen.

SQL Struktur

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `alias` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `projects` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `cloneable` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `preview_image` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `preview_text` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
  `category_id` int(11) DEFAULT NULL,
  `alias` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `last_update` datetime NOT NULL,
  `prod` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_5C93B3A412469DE2` (`category_id`),
  CONSTRAINT `FK_5C93B3A412469DE2` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=877 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ToDo

  • Sources sollen wie Module geladen werden. Beim start als DLL?
  • Die MySQL DB flexibler gestalten.
  • HTML Dateien benötigen auch den Platzhalter "{media_path}".
  • Tag Beschreibung/Datum in die Mysql Tabelle einfügen
  • Schlagworte für Projekte
  • HTML/Markdown nicht verschieben, sondern in der MySQL speichern.
  • Die Zeit zum Ausführen nicht Hardcoded, sondern in die config einfügen.

Tags

©2024 Alexander Malk v0.0.13p