@@ -0,0 +1,3 @@
|
||||
.git
|
||||
public
|
||||
.hugo_build.lock
|
||||
@@ -0,0 +1,33 @@
|
||||
name: Build and Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Login to registry
|
||||
run: |
|
||||
echo "${{ secrets.GIT_PASS }}" | \
|
||||
docker login git.ada-dev.ru -u ${{ secrets.GIT_USER }} --password-stdin
|
||||
|
||||
- name: Build and push
|
||||
run: |
|
||||
docker build -t git.ada-dev.ru/${{ gitea.repository }}:latest .
|
||||
docker push git.ada-dev.ru/${{ gitea.repository }}:latest
|
||||
|
||||
- name: Deploy container
|
||||
run: |
|
||||
docker stop ada-dev-ru 2>/dev/null || true
|
||||
docker rm ada-dev-ru 2>/dev/null || true
|
||||
docker run -d \
|
||||
--name ada-dev-ru \
|
||||
--restart unless-stopped \
|
||||
-p 8081:80 \
|
||||
git.ada-dev.ru/${{ gitea.repository }}:latest
|
||||
@@ -0,0 +1,2 @@
|
||||
public/
|
||||
.hugo_build.lock
|
||||
@@ -0,0 +1,8 @@
|
||||
FROM hugomods/hugo:exts AS builder
|
||||
WORKDIR /site
|
||||
COPY . .
|
||||
RUN hugo --minify
|
||||
|
||||
FROM nginx:alpine
|
||||
COPY --from=builder /site/public /usr/share/nginx/html
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
@@ -0,0 +1,5 @@
|
||||
+++
|
||||
date = '{{ .Date }}'
|
||||
draft = true
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
+++
|
||||
@@ -0,0 +1,7 @@
|
||||
+++
|
||||
+++
|
||||
|
||||
<div class="home-nav">
|
||||
<a href="/projects/"><span data-feather="code"></span> Projects</a>
|
||||
<a href="/posts/"><span data-feather="file-text"></span> Notes</a>
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
+++
|
||||
title = "Notes"
|
||||
+++
|
||||
@@ -0,0 +1,3 @@
|
||||
+++
|
||||
title = "Projects"
|
||||
+++
|
||||
@@ -0,0 +1,7 @@
|
||||
+++
|
||||
title = "Hopfield & Hemming Platground"
|
||||
description = "Визуализация работы сетей Хопфилда и Хэмминга"
|
||||
tags = ["ruby", "math", "ml"]
|
||||
externalUrl = "https://projects.ada-dev.ru/neural"
|
||||
weight = 1
|
||||
+++
|
||||
@@ -0,0 +1,114 @@
|
||||
baseURL = 'https://ada-dev.ru/'
|
||||
locale = 'ru-ru'
|
||||
title = 'Dmitry Antipenko'
|
||||
theme = "gokarna"
|
||||
enableRobotsTXT = true
|
||||
|
||||
[params]
|
||||
avatarURL = "/images/avatar.webp"
|
||||
avatarAltText = "Dmitry"
|
||||
showBackToTopButton = true
|
||||
|
||||
customHeadHTML = """
|
||||
<style>
|
||||
.home-nav {
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
.home-nav a {
|
||||
font-size: 1.1rem;
|
||||
text-decoration: none;
|
||||
opacity: 0.75;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.home-nav a:hover { opacity: 1; }
|
||||
.home-nav a svg { vertical-align: middle; margin-bottom: 2px; }
|
||||
|
||||
.projects-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.project-card {
|
||||
display: block;
|
||||
padding: 1.25rem 1.5rem;
|
||||
border: 1px solid currentColor;
|
||||
border-radius: 6px;
|
||||
text-decoration: none;
|
||||
opacity: 0.85;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.project-card:hover { opacity: 1; }
|
||||
.project-card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.project-title { font-size: 1.1rem; font-weight: 600; }
|
||||
.project-arrow svg { width: 18px; height: 18px; }
|
||||
.project-description {
|
||||
margin: 0.5rem 0 0.75rem;
|
||||
opacity: 0.7;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
.project-tags { display: flex; gap: 0.5rem; flex-wrap: wrap; }
|
||||
.project-tag {
|
||||
font-size: 0.75rem;
|
||||
padding: 2px 8px;
|
||||
border: 1px solid currentColor;
|
||||
border-radius: 99px;
|
||||
opacity: 0.6;
|
||||
}
|
||||
</style>
|
||||
"""
|
||||
|
||||
customFooterHTML = """
|
||||
<script>
|
||||
(function () {
|
||||
function syncAvatars() {
|
||||
var imgs = document.querySelectorAll('.theme-aware-avatar');
|
||||
var darkCss = document.getElementById('dark-theme');
|
||||
var isDark = darkCss && !darkCss.disabled;
|
||||
imgs.forEach(function(img) { img.style.filter = isDark ? '' : 'invert(1)'; });
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
syncAvatars();
|
||||
var darkCss = document.getElementById('dark-theme');
|
||||
if (darkCss) {
|
||||
new MutationObserver(syncAvatars).observe(darkCss, {
|
||||
attributes: true, attributeFilter: ['disabled']
|
||||
});
|
||||
}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
"""
|
||||
|
||||
socialIcons = [
|
||||
{name = "github", url = "https://github.com/ada-dmitry"},
|
||||
{name = "telegram", url = "https://t.me/moonlosk"},
|
||||
{name = "email", url = "mailto:ada.dmitry@gmail.com"}
|
||||
]
|
||||
|
||||
[menu]
|
||||
[[menu.main]]
|
||||
identifier = "github"
|
||||
pre = "<span data-feather='github'></span>"
|
||||
url = "https://github.com/ada-dmitry"
|
||||
weight = 3
|
||||
[menu.main.params]
|
||||
NewPage = true
|
||||
|
||||
[markup]
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
[markup.tableOfContents]
|
||||
startLevel = 1
|
||||
endLevel = 4
|
||||
ordered = false
|
||||
|
||||
[minify]
|
||||
minifyOutput = true
|
||||
@@ -0,0 +1,59 @@
|
||||
{{ define "main" }}
|
||||
<section class="home-about">
|
||||
<div class="avatar">
|
||||
{{ if isset .Site.Params "avatarurl" }}
|
||||
<img class="{{ .Site.Params.AvatarSize | default "size-m" }} theme-aware-avatar"
|
||||
src='{{ .Scratch.Get "avatarImgSrc" }}'
|
||||
alt="{{ .Site.Params.AvatarAltText | default "avatar" }}">
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<h1>{{ .Site.Title }}</h1>
|
||||
{{ if isset .Site.Params "description" }}
|
||||
<h2>{{ .Site.Params.Description }}</h2>
|
||||
{{ end }}
|
||||
</section>
|
||||
|
||||
<div class="flex-break"></div>
|
||||
|
||||
{{ if isset .Site.Params "socialicons" }}
|
||||
<div class="gk-social-icons">
|
||||
<ul class="gk-social-icons-list">
|
||||
{{ range .Site.Params.SocialIcons }}
|
||||
<li class="gk-social-icon">
|
||||
<a href="{{ .url }}" target="_blank" rel="{{ if .rel }}{{ .rel }} {{ end }}noopener noreferrer" aria-label="Learn more on {{ .name }}">
|
||||
<img class="svg-inject" src="{{ relURL "svg/icons/" }}{{ .name | lower }}.svg" alt="">
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ if (or
|
||||
(and (fileExists "content/_index.md") .Content)
|
||||
(fileExists "content/index-about.md")) }}
|
||||
<section class="home-content">
|
||||
{{ or .Content (readFile "index-about.md" | markdownify) }}
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
{{ if isset .Site.Params "showpostsonhomepage" }}
|
||||
<div class="home-posts list-posts">
|
||||
<h2>{{ i18n (.Site.Params.ShowPostsOnHomePage | humanize) }}</h2>
|
||||
|
||||
{{ $posts := where .Site.Pages "Params.type" "post" }}
|
||||
|
||||
{{ if eq .Site.Params.ShowPostsOnHomePage "popular" }}
|
||||
{{ range $posts.ByWeight | first (or .Site.Params.NumberPostsOnHomePage 4) }}
|
||||
{{- partial "list-posts.html" . -}}
|
||||
{{ end }}
|
||||
{{ else if eq .Site.Params.ShowPostsOnHomePage "recent" }}
|
||||
{{ range $posts.ByDate.Reverse | first (or .Site.Params.NumberPostsOnHomePage 4) }}
|
||||
{{- partial "list-posts.html" . -}}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
@@ -0,0 +1,59 @@
|
||||
<header class="header">
|
||||
<nav class="header-nav">
|
||||
|
||||
{{ if isset .Site.Params "avatarurl" }}
|
||||
<div class="avatar">
|
||||
<a href="{{ .Site.BaseURL }}">
|
||||
<img src='{{ .Scratch.Get "avatarImgSrc" }}' alt="{{ .Site.Params.AvatarAltText|default "avatar" }}" class="theme-aware-avatar">
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<div class="nav-title">
|
||||
<a class="nav-brand" href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a>
|
||||
</div>
|
||||
|
||||
<div class="nav-links">
|
||||
{{ range .Site.Menus.main }}
|
||||
<div class="nav-link">
|
||||
<a href="{{ .URL | absURL }}" aria-label="{{ .Identifier }}" {{ if .Params.NewPage -}}target="_blank" {{- end -}}>
|
||||
{{- .Pre | safeHTML }} {{ .Name }} {{ .Post | safeHTML -}}
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<span class="nav-icons-divider"></span>
|
||||
<div class="nav-link dark-theme-toggle">
|
||||
<span class="sr-only dark-theme-toggle-screen-reader-target">theme</span>
|
||||
<a aria-hidden="true" role="switch">
|
||||
<span class="theme-toggle-icon" data-feather="moon"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="nav-link" id="hamburger-menu-toggle">
|
||||
<span class="sr-only hamburger-menu-toggle-screen-reader-target">menu</span>
|
||||
<a aria-checked="false" aria-labelledby="hamburger-menu-toggle" id="hamburger-menu-toggle-target" role="switch">
|
||||
<span data-feather="menu"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- For mobile -->
|
||||
<ul class="nav-hamburger-list visibility-hidden">
|
||||
{{ range .Site.Menus.main }}
|
||||
<li class="nav-item">
|
||||
<a href="{{ .URL | absURL }}" {{ if .Params.NewPage -}} target="_blank"{{- end -}}>
|
||||
{{- .Pre | safeHTML }} {{ .Name }} {{ .Post | safeHTML -}}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
<li class="nav-item dark-theme-toggle">
|
||||
<span class="sr-only dark-theme-toggle-screen-reader-target">theme</span>
|
||||
<a role="switch">
|
||||
<span class="theme-toggle-icon" data-feather="moon"></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -0,0 +1,29 @@
|
||||
{{ define "main" }}
|
||||
<div class="container">
|
||||
<h1 class="list-title">{{ .Title }}</h1>
|
||||
<div class="projects-list">
|
||||
{{ range .Pages.ByWeight }}
|
||||
{{ $url := .Permalink }}
|
||||
{{ if .Params.externalUrl }}{{ $url = .Params.externalUrl }}{{ end }}
|
||||
<a class="project-card"
|
||||
href="{{ $url }}"
|
||||
{{ if .Params.externalUrl }}target="_blank" rel="noopener noreferrer"{{ end }}>
|
||||
<div class="project-card-header">
|
||||
<span class="project-title">{{ .Title }}</span>
|
||||
<span data-feather="arrow-up-right" class="project-arrow"></span>
|
||||
</div>
|
||||
{{ if .Params.description }}
|
||||
<p class="project-description">{{ .Params.description }}</p>
|
||||
{{ end }}
|
||||
{{ if .Params.tags }}
|
||||
<div class="project-tags">
|
||||
{{ range .Params.tags }}
|
||||
<span class="project-tag">{{ . }}</span>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
server {
|
||||
listen 80;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
error_page 404 /404.html;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=https://projects.ada-dev.ru/neural">
|
||||
<link rel="canonical" href="https://projects.ada-dev.ru/neural">
|
||||
<title>Редирект...</title>
|
||||
</head>
|
||||
<body>
|
||||
<a href="https://projects.ada-dev.ru/neural">Переходим...</a>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 733 B |
Reference in New Issue
Block a user