This commit is contained in:
parent
186491250e
commit
08557f45db
@ -8,6 +8,7 @@ RUN CGO_ENABLED=0 go build -o /app
|
||||
FROM scratch
|
||||
COPY --from=build /app .
|
||||
COPY html/ html/
|
||||
COPY css/ css/
|
||||
COPY static/ static/
|
||||
COPY tmpl/ tmpl/
|
||||
EXPOSE 3000
|
||||
|
@ -8,12 +8,15 @@ services:
|
||||
watch:
|
||||
- action: rebuild
|
||||
path: src/
|
||||
- action: sync+restart
|
||||
path: html/
|
||||
target: html/
|
||||
- action: sync+restart
|
||||
path: tmpl/
|
||||
target: tmpl/
|
||||
- action: sync+restart
|
||||
path: html/
|
||||
target: html/
|
||||
- action: sync
|
||||
path: css/
|
||||
target: css/
|
||||
- action: sync
|
||||
path: static/
|
||||
target: static/
|
||||
|
11
css/resume.css
Normal file
11
css/resume.css
Normal file
@ -0,0 +1,11 @@
|
||||
@media print {
|
||||
@page {
|
||||
size: A4;
|
||||
size: portrait;
|
||||
margin: 5mm;
|
||||
}
|
||||
|
||||
#menu, #credits {
|
||||
display: none;
|
||||
}
|
||||
}
|
@ -2,9 +2,9 @@
|
||||
<html>
|
||||
<head>
|
||||
{{template "head.tmpl" .}}
|
||||
<script src="static/copy.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="static/copy.js"></script>
|
||||
{{template "header.tmpl" .}}
|
||||
<div id="content">
|
||||
<!--
|
||||
@ -56,6 +56,11 @@
|
||||
<td id="ssh"><a href="/static/ssh" target="_blank" rel="noreferrer noopener">ssh</a></td>
|
||||
<td><button onclick="copyFile('ssh')">Copy</button></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>LinkedIn</td>
|
||||
<td id="in"><a href="https://www.linkedin.com/in/angedhn" target="_blank" rel="noreferrer noopener">www.linkedin.com/in/angedhn</a></td>
|
||||
<td><button onclick="copyElem('in')">Copy</button></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
@ -1,8 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
{{template "head.tmpl" .}}
|
||||
<head>
|
||||
{{template "head.tmpl" .}}
|
||||
<link rel="stylesheet" href="resume.css"/>
|
||||
</head>
|
||||
<body>
|
||||
{{template "header.tmpl". }}
|
||||
{{template "header.tmpl" .}}
|
||||
<div id="content">
|
||||
<div id="nav">
|
||||
<!--
|
||||
@ -28,20 +31,21 @@
|
||||
<h3><b>Freelance</b> - DevOps</h3>
|
||||
SEPTEMBER 2023 - TODAY
|
||||
<ul>
|
||||
<li>Server setup (Debian, Docker/K8s, web server, customer application)</li>
|
||||
<li>Server setup (Debian, Docker/K8S, web server, customer application)</li>
|
||||
<li>CI/CD, real-time monitoring</li>
|
||||
</ul>
|
||||
<h3><b>Selfhost</b> - DevOps</h3>
|
||||
JANUARY 2022 - TODAY
|
||||
<ul>
|
||||
<li>Debian + K8S + Gitea CI/CD + Nextcloud + Matrix.org + Jellyfin + SearXNG</li>
|
||||
<li>Debian, K8S, Gitea CI/CD</li>
|
||||
<li>Nextcloud, Matrix.org, Jellyfin, SearXNG</li>
|
||||
</ul>
|
||||
<h3><b>EPITECH CodingClub association, Toulouse</b> - Cobra</h3>
|
||||
JANUARY 2021 - JUNE 2024
|
||||
<ul>
|
||||
<li>Coding workshops for high school students</li>
|
||||
</ul>
|
||||
<h3><b>Predicloud, Toulouse</b> - DevOps / Site Reliability Manager</h3>
|
||||
<h3><b>Predicloud, Toulouse</b> - DevOps SRE</h3>
|
||||
JUNE 2022 - JULY 2023
|
||||
<ul>
|
||||
<li>CI/CD, K8S monitoring</li>
|
||||
@ -57,7 +61,7 @@
|
||||
<tr><td>Python</td> <td>Git</td></tr>
|
||||
<tr><td>Bash</td> <td>Vim</td></tr>
|
||||
<tr><td>Go</td> <td>Docker</td></tr>
|
||||
<tr><td>JavaScript</td><td>K8S</td></tr>
|
||||
<tr><td>JS</td> <td>K8S</td></tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
@ -16,15 +16,19 @@ var routes = []struct {
|
||||
handler http.HandlerFunc
|
||||
}{
|
||||
{[]string{"GET"}, url(""), index},
|
||||
{[]string{"GET"}, url("/style\\.css"), style},
|
||||
{[]string{"GET"}, url("/static/.+"), static},
|
||||
{[]string{"GET"}, url("/[^/]+"), html},
|
||||
{[]string{"GET"}, url("/(.+\\.css)"), css},
|
||||
{[]string{"GET"}, url("/([^/]+)"), html},
|
||||
}
|
||||
|
||||
func url(s string) *regexp.Regexp {
|
||||
return regexp.MustCompile("^" + s + "/?$")
|
||||
}
|
||||
|
||||
func getParam(r *http.Request, i int) string {
|
||||
return r.Context().Value(URLParam{}).([]string)[i]
|
||||
}
|
||||
|
||||
func route(w http.ResponseWriter, r *http.Request) {
|
||||
for _, rt := range routes {
|
||||
matches := rt.regex.FindStringSubmatch(r.URL.Path)
|
||||
|
@ -26,6 +26,6 @@ func generateTmpl() {
|
||||
"name": names[i],
|
||||
"names": names,
|
||||
})
|
||||
TMPL["/" + names[i]] = b.Bytes()
|
||||
TMPL[names[i]] = b.Bytes()
|
||||
}
|
||||
}
|
||||
|
13
src/views.go
13
src/views.go
@ -1,23 +1,26 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"net/http"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func index(w http.ResponseWriter, r *http.Request) {
|
||||
http.Redirect(w, r, "/contact", http.StatusMovedPermanently)
|
||||
}
|
||||
|
||||
func style(w http.ResponseWriter, r *http.Request) {
|
||||
http.ServeFile(w, r, "html/style.css")
|
||||
}
|
||||
|
||||
func static(w http.ResponseWriter, r *http.Request) {
|
||||
http.ServeFile(w, r, r.URL.Path)
|
||||
}
|
||||
|
||||
func css(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Println(filepath.Join("css", getParam(r, 0)))
|
||||
http.ServeFile(w, r, filepath.Join("css", getParam(r, 0)))
|
||||
}
|
||||
|
||||
func html(w http.ResponseWriter, r *http.Request) {
|
||||
if t, found := TMPL[r.URL.Path]; found {
|
||||
if t, found := TMPL[getParam(r, 0)]; found {
|
||||
w.Write(t)
|
||||
} else {
|
||||
http.NotFound(w, r)
|
||||
|
@ -1,5 +1,3 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Ange DUHAYON</title>
|
||||
<link rel="stylesheet" href="style.css"/>
|
||||
</head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Ange DUHAYON</title>
|
||||
<link rel="stylesheet" href="style.css"/>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<div id="header">
|
||||
<a id="headerLink" href="/">Ange DUHAYON</a>
|
||||
<span id="headerSubtitle">DevOps Engineer</span>
|
||||
<span class="right" style="font-size: .4em;">Website heavily inspired from <a href="//suckless.org/" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
|
||||
<span id="credits" class="right" style="font-size: .4em;">Website heavily inspired from <a href="//suckless.org/" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
|
||||
</div>
|
||||
<div id="menu">
|
||||
{{$name := .name}}
|
||||
|
Loading…
Reference in New Issue
Block a user