Theme to hello-friend-ng
Build and publish / docker (push) Failing after 1m25s
Details
Build and publish / docker (push) Failing after 1m25s
Details
This commit is contained in:
parent
9a65489b95
commit
47378b6afe
|
@ -1,3 +1,6 @@
|
||||||
[submodule "themes/hugo-blog-awesome"]
|
[submodule "themes/hugo-blog-awesome"]
|
||||||
path = themes/hugo-blog-awesome
|
path = themes/hugo-blog-awesome
|
||||||
url = https://github.com/hugo-sid/hugo-blog-awesome.git
|
url = https://github.com/hugo-sid/hugo-blog-awesome.git
|
||||||
|
[submodule "themes/hello-friend-ng"]
|
||||||
|
path = themes/hello-friend-ng
|
||||||
|
url = https://github.com/rhazdon/hugo-theme-hello-friend-ng.git
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
+++
|
---
|
||||||
title = 'Hello World'
|
title: 'Hello World'
|
||||||
date = 2024-01-19T10:59:41+01:00
|
date: 2024-01-19T10:59:41+01:00
|
||||||
draft = false
|
draft: false
|
||||||
+++
|
---
|
||||||
|
|
66
hugo.yaml
66
hugo.yaml
|
@ -1,50 +1,44 @@
|
||||||
baseURL: https://blog.bdubois.io
|
baseURL: https://blog.bdubois.io
|
||||||
languageCode: en-gb
|
languageCode: en-gb
|
||||||
title: Brieuc Dubois's blog
|
title: Brieuc Dubois
|
||||||
theme: hugo-blog-awesome
|
theme: hello-friend-ng
|
||||||
relativeURLs: true
|
relativeURLs: true
|
||||||
uglyURLs: true
|
uglyURLs: true
|
||||||
enableEmoji: true
|
enableEmoji: true
|
||||||
enabeRobotsTXT: true
|
enabeRobotsTXT: true
|
||||||
params:
|
params:
|
||||||
socialIcons:
|
rssFullText: true
|
||||||
- name: gitea
|
social:
|
||||||
url: https://git.bhasher.com
|
- name: gitea
|
||||||
- name: github
|
url: https://git.bhasher.com
|
||||||
url: https://github.com/BhasherBEL
|
- name: matrix
|
||||||
- name: matrix
|
url: https://matrix.to/#/@bhasher:bhasher.com
|
||||||
url: https://matrix.to/#/@bhasher:bhasher.com
|
- name: github
|
||||||
- name: rss
|
url: https://github.com/BhasherBEL
|
||||||
url: feed.xml
|
- name: rss
|
||||||
sitename: Brieuc Dubois
|
url: feed.xml
|
||||||
defaultColor: dark
|
homeSubtitle: Student passionate about computer science, software engineering, free and open source, devops, web developpement, cybersecurity.
|
||||||
description:
|
enableGlobalLanguageMenu: true
|
||||||
Blog of Brieuc Dubois about computer science, software engineering,
|
|
||||||
linux, devops, web developpement, cybersecurity.
|
|
||||||
rssFeedDescription: full
|
|
||||||
author:
|
|
||||||
avatar: img/profile.webp
|
|
||||||
intro: Brieuc Dubois
|
|
||||||
name: Brieuc Dubois
|
|
||||||
description:
|
|
||||||
Computer scientist student from Belgium passionate by programming
|
|
||||||
and learning new things such as DevOps, Go, Svelte or network security.
|
|
||||||
outputs:
|
outputs:
|
||||||
home:
|
home:
|
||||||
- HTML
|
- html
|
||||||
- RSS
|
- rss
|
||||||
markup:
|
markup:
|
||||||
highlight:
|
highlight:
|
||||||
noClasses: false
|
noClasses: false
|
||||||
menu:
|
menu:
|
||||||
main:
|
main:
|
||||||
- pageRef: /
|
- pageRef: /
|
||||||
name: Home
|
name: Home
|
||||||
weight: 10
|
weight: 10
|
||||||
- pageRef: posts
|
- pageRef: posts
|
||||||
name: Posts
|
name: Posts
|
||||||
weight: 20
|
weight: 20
|
||||||
- pageRef: about
|
- pageRef: tags
|
||||||
name: About
|
name: Tags
|
||||||
weight: 30
|
weight: 30
|
||||||
|
- pageRef: about
|
||||||
|
name: About
|
||||||
|
weight: 40
|
||||||
|
taxonomies:
|
||||||
|
tag: tags
|
||||||
|
|
|
@ -1,311 +0,0 @@
|
||||||
<head>
|
|
||||||
{{- partial "meta/main.html" . }}
|
|
||||||
{{- hugo.Generator }}
|
|
||||||
|
|
||||||
{{/* Canonical link, RSS */}}
|
|
||||||
|
|
||||||
<link rel="canonical" href="{{ .Permalink }}">
|
|
||||||
{{- with .OutputFormats.Get "RSS" }}
|
|
||||||
<link href="{{ .RelPermalink }}" rel="alternate" type="application/rss+xml" title="{{ $.Site.Title }}">
|
|
||||||
<link href="{{ .RelPermalink }}" rel="feed" type="application/rss+xml" title="{{ $.Site.Title }}">
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{- /* Styles */ -}}
|
|
||||||
|
|
||||||
{{- $style := resources.Get "sass/main.scss" | resources.ExecuteAsTemplate "style.scss" . | toCSS (dict "targetPath" "style.css") | minify | fingerprint }}
|
|
||||||
<link href="{{ $style.RelPermalink }}" rel="stylesheet">
|
|
||||||
{{- $code_syntax_highlight_css := resources.Get "code-highlight.css" | minify | fingerprint }}
|
|
||||||
<link href="{{ $code_syntax_highlight_css.RelPermalink }}" rel="stylesheet">
|
|
||||||
|
|
||||||
{{/* Favicons */}}
|
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ (resources.Get "icons/apple-touch-icon.png").RelPermalink }}">
|
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ (resources.Get "icons/favicon-32x32.png").RelPermalink }}">
|
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ (resources.Get "icons/favicon-16x16.png").RelPermalink }}">
|
|
||||||
<link rel="mask-icon" href="{{ (resources.Get "icons/safari-pinned-tab.svg").RelPermalink }}">
|
|
||||||
<link rel="shortcut icon" href="{{ (resources.Get "icons/favicon.ico" | resources.Copy "favicon.ico").RelPermalink }}">
|
|
||||||
|
|
||||||
{{- partial "webmanifest.html" . -}}
|
|
||||||
{{- partial "browserconfig.html" . -}}
|
|
||||||
|
|
||||||
<meta name="theme-color" content="{{ .Site.Params.webmanifest.theme_color | default "#434648" }}">
|
|
||||||
|
|
||||||
{{/* SVG favicon for the modern web */}}
|
|
||||||
<link rel="icon" type="image/svg+xml" href="{{ (resources.Get "icons/favicon.svg").RelPermalink }}">
|
|
||||||
<script data-goatcounter="https://c.bhasher.com" async>
|
|
||||||
// GoatCounter: https://www.goatcounter.com
|
|
||||||
// This file (and *only* this file) is released under the ISC license:
|
|
||||||
// https://opensource.org/licenses/ISC
|
|
||||||
;(function() {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
if (window.goatcounter && window.goatcounter.vars) // Compatibility with very old version; do not use.
|
|
||||||
window.goatcounter = window.goatcounter.vars
|
|
||||||
else
|
|
||||||
window.goatcounter = window.goatcounter || {}
|
|
||||||
|
|
||||||
// Load settings from data-goatcounter-settings.
|
|
||||||
var s = document.querySelector('script[data-goatcounter]')
|
|
||||||
if (s && s.dataset.goatcounterSettings) {
|
|
||||||
try { var set = JSON.parse(s.dataset.goatcounterSettings) }
|
|
||||||
catch (err) { console.error('invalid JSON in data-goatcounter-settings: ' + err) }
|
|
||||||
for (var k in set)
|
|
||||||
if (['no_onload', 'no_events', 'allow_local', 'allow_frame', 'path', 'title', 'referrer', 'event'].indexOf(k) > -1)
|
|
||||||
window.goatcounter[k] = set[k]
|
|
||||||
}
|
|
||||||
|
|
||||||
var enc = encodeURIComponent
|
|
||||||
|
|
||||||
// Get all data we're going to send off to the counter endpoint.
|
|
||||||
var get_data = function(vars) {
|
|
||||||
var data = {
|
|
||||||
p: (vars.path === undefined ? goatcounter.path : vars.path),
|
|
||||||
r: (vars.referrer === undefined ? goatcounter.referrer : vars.referrer),
|
|
||||||
t: (vars.title === undefined ? goatcounter.title : vars.title),
|
|
||||||
e: !!(vars.event || goatcounter.event),
|
|
||||||
s: [window.screen.width, window.screen.height, (window.devicePixelRatio || 1)],
|
|
||||||
b: is_bot(),
|
|
||||||
q: location.search,
|
|
||||||
}
|
|
||||||
|
|
||||||
var rcb, pcb, tcb // Save callbacks to apply later.
|
|
||||||
if (typeof(data.r) === 'function') rcb = data.r
|
|
||||||
if (typeof(data.t) === 'function') tcb = data.t
|
|
||||||
if (typeof(data.p) === 'function') pcb = data.p
|
|
||||||
|
|
||||||
if (is_empty(data.r)) data.r = document.referrer
|
|
||||||
if (is_empty(data.t)) data.t = document.title
|
|
||||||
if (is_empty(data.p)) data.p = get_path()
|
|
||||||
|
|
||||||
if (rcb) data.r = rcb(data.r)
|
|
||||||
if (tcb) data.t = tcb(data.t)
|
|
||||||
if (pcb) data.p = pcb(data.p)
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if a value is "empty" for the purpose of get_data().
|
|
||||||
var is_empty = function(v) { return v === null || v === undefined || typeof(v) === 'function' }
|
|
||||||
|
|
||||||
// See if this looks like a bot; there is some additional filtering on the
|
|
||||||
// backend, but these properties can't be fetched from there.
|
|
||||||
var is_bot = function() {
|
|
||||||
// Headless browsers are probably a bot.
|
|
||||||
var w = window, d = document
|
|
||||||
if (w.callPhantom || w._phantom || w.phantom)
|
|
||||||
return 150
|
|
||||||
if (w.__nightmare)
|
|
||||||
return 151
|
|
||||||
if (d.__selenium_unwrapped || d.__webdriver_evaluate || d.__driver_evaluate)
|
|
||||||
return 152
|
|
||||||
if (navigator.webdriver)
|
|
||||||
return 153
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Object to urlencoded string, starting with a ?.
|
|
||||||
var urlencode = function(obj) {
|
|
||||||
var p = []
|
|
||||||
for (var k in obj)
|
|
||||||
if (obj[k] !== '' && obj[k] !== null && obj[k] !== undefined && obj[k] !== false)
|
|
||||||
p.push(enc(k) + '=' + enc(obj[k]))
|
|
||||||
return '?' + p.join('&')
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show a warning in the console.
|
|
||||||
var warn = function(msg) {
|
|
||||||
if (console && 'warn' in console)
|
|
||||||
console.warn('goatcounter: ' + msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the endpoint to send requests to.
|
|
||||||
var get_endpoint = function() {
|
|
||||||
var s = document.querySelector('script[data-goatcounter]')
|
|
||||||
if (s && s.dataset.goatcounter)
|
|
||||||
return s.dataset.goatcounter
|
|
||||||
return (goatcounter.endpoint || window.counter) // counter is for compat; don't use.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get current path.
|
|
||||||
var get_path = function() {
|
|
||||||
var loc = location,
|
|
||||||
c = document.querySelector('link[rel="canonical"][href]')
|
|
||||||
if (c) { // May be relative or point to different domain.
|
|
||||||
var a = document.createElement('a')
|
|
||||||
a.href = c.href
|
|
||||||
if (a.hostname.replace(/^www\./, '') === location.hostname.replace(/^www\./, ''))
|
|
||||||
loc = a
|
|
||||||
}
|
|
||||||
return (loc.pathname + loc.search) || '/'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run function after DOM is loaded.
|
|
||||||
var on_load = function(f) {
|
|
||||||
if (document.body === null)
|
|
||||||
document.addEventListener('DOMContentLoaded', function() { f() }, false)
|
|
||||||
else
|
|
||||||
f()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filter some requests that we (probably) don't want to count.
|
|
||||||
goatcounter.filter = function() {
|
|
||||||
if ('visibilityState' in document && document.visibilityState === 'prerender')
|
|
||||||
return 'visibilityState'
|
|
||||||
if (!goatcounter.allow_frame && location !== parent.location)
|
|
||||||
return 'frame'
|
|
||||||
if (!goatcounter.allow_local && location.hostname.match(/(localhost$|^127\.|^10\.|^172\.(1[6-9]|2[0-9]|3[0-1])\.|^192\.168\.|^0\.0\.0\.0$)/))
|
|
||||||
return 'localhost'
|
|
||||||
if (!goatcounter.allow_local && location.protocol === 'file:')
|
|
||||||
return 'localfile'
|
|
||||||
if (localStorage && localStorage.getItem('skipgc') === 't')
|
|
||||||
return 'disabled with #toggle-goatcounter'
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get URL to send to GoatCounter.
|
|
||||||
window.goatcounter.url = function(vars) {
|
|
||||||
var data = get_data(vars || {})
|
|
||||||
if (data.p === null) // null from user callback.
|
|
||||||
return
|
|
||||||
data.rnd = Math.random().toString(36).substr(2, 5) // Browsers don't always listen to Cache-Control.
|
|
||||||
|
|
||||||
var endpoint = get_endpoint()
|
|
||||||
if (!endpoint)
|
|
||||||
return warn('no endpoint found')
|
|
||||||
|
|
||||||
return endpoint + urlencode(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Count a hit.
|
|
||||||
window.goatcounter.count = function(vars) {
|
|
||||||
var f = goatcounter.filter()
|
|
||||||
if (f)
|
|
||||||
return warn('not counting because of: ' + f)
|
|
||||||
|
|
||||||
var url = goatcounter.url(vars)
|
|
||||||
if (!url)
|
|
||||||
return warn('not counting because path callback returned null')
|
|
||||||
|
|
||||||
var img = document.createElement('img')
|
|
||||||
img.src = url
|
|
||||||
img.style.position = 'absolute' // Affect layout less.
|
|
||||||
img.setAttribute('alt', '')
|
|
||||||
img.setAttribute('aria-hidden', 'true')
|
|
||||||
|
|
||||||
var rm = function() { if (img && img.parentNode) img.parentNode.removeChild(img) }
|
|
||||||
img.addEventListener('load', rm, false)
|
|
||||||
document.body.appendChild(img)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get a query parameter.
|
|
||||||
window.goatcounter.get_query = function(name) {
|
|
||||||
var s = location.search.substr(1).split('&')
|
|
||||||
for (var i = 0; i < s.length; i++)
|
|
||||||
if (s[i].toLowerCase().indexOf(name.toLowerCase() + '=') === 0)
|
|
||||||
return s[i].substr(name.length + 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Track click events.
|
|
||||||
window.goatcounter.bind_events = function() {
|
|
||||||
if (!document.querySelectorAll) // Just in case someone uses an ancient browser.
|
|
||||||
return
|
|
||||||
|
|
||||||
var send = function(elem) {
|
|
||||||
return function() {
|
|
||||||
goatcounter.count({
|
|
||||||
event: true,
|
|
||||||
path: (elem.dataset.goatcounterClick || elem.name || elem.id || ''),
|
|
||||||
title: (elem.dataset.goatcounterTitle || elem.title || (elem.innerHTML || '').substr(0, 200) || ''),
|
|
||||||
referrer: (elem.dataset.goatcounterReferrer || elem.dataset.goatcounterReferral || ''),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Array.prototype.slice.call(document.querySelectorAll("*[data-goatcounter-click]")).forEach(function(elem) {
|
|
||||||
if (elem.dataset.goatcounterBound)
|
|
||||||
return
|
|
||||||
var f = send(elem)
|
|
||||||
elem.addEventListener('click', f, false)
|
|
||||||
elem.addEventListener('auxclick', f, false) // Middle click.
|
|
||||||
elem.dataset.goatcounterBound = 'true'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add a "visitor counter" frame or image.
|
|
||||||
window.goatcounter.visit_count = function(opt) {
|
|
||||||
on_load(function() {
|
|
||||||
opt = opt || {}
|
|
||||||
opt.type = opt.type || 'html'
|
|
||||||
opt.append = opt.append || 'body'
|
|
||||||
opt.path = opt.path || get_path()
|
|
||||||
opt.attr = opt.attr || {width: '200', height: (opt.no_branding ? '60' : '80')}
|
|
||||||
|
|
||||||
opt.attr['src'] = get_endpoint() + 'er/' + enc(opt.path) + '.' + enc(opt.type) + '?'
|
|
||||||
if (opt.no_branding) opt.attr['src'] += '&no_branding=1'
|
|
||||||
if (opt.style) opt.attr['src'] += '&style=' + enc(opt.style)
|
|
||||||
if (opt.start) opt.attr['src'] += '&start=' + enc(opt.start)
|
|
||||||
if (opt.end) opt.attr['src'] += '&end=' + enc(opt.end)
|
|
||||||
|
|
||||||
var tag = {png: 'img', svg: 'img', html: 'iframe'}[opt.type]
|
|
||||||
if (!tag)
|
|
||||||
return warn('visit_count: unknown type: ' + opt.type)
|
|
||||||
|
|
||||||
if (opt.type === 'html') {
|
|
||||||
opt.attr['frameborder'] = '0'
|
|
||||||
opt.attr['scrolling'] = 'no'
|
|
||||||
}
|
|
||||||
|
|
||||||
var d = document.createElement(tag)
|
|
||||||
for (var k in opt.attr)
|
|
||||||
d.setAttribute(k, opt.attr[k])
|
|
||||||
|
|
||||||
var p = document.querySelector(opt.append)
|
|
||||||
if (!p)
|
|
||||||
return warn('visit_count: append not found: ' + opt.append)
|
|
||||||
p.appendChild(d)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make it easy to skip your own views.
|
|
||||||
if (location.hash === '#toggle-goatcounter') {
|
|
||||||
if (localStorage.getItem('skipgc') === 't') {
|
|
||||||
localStorage.removeItem('skipgc', 't')
|
|
||||||
alert('GoatCounter tracking is now ENABLED in this browser.')
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
localStorage.setItem('skipgc', 't')
|
|
||||||
alert('GoatCounter tracking is now DISABLED in this browser until ' + location + ' is loaded again.')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!goatcounter.no_onload)
|
|
||||||
on_load(function() {
|
|
||||||
// 1. Page is visible, count request.
|
|
||||||
// 2. Page is not yet visible; wait until it switches to 'visible' and count.
|
|
||||||
// See #487
|
|
||||||
if (!('visibilityState' in document) || document.visibilityState === 'visible')
|
|
||||||
goatcounter.count()
|
|
||||||
else {
|
|
||||||
var f = function(e) {
|
|
||||||
if (document.visibilityState !== 'visible')
|
|
||||||
return
|
|
||||||
document.removeEventListener('visibilitychange', f)
|
|
||||||
goatcounter.count()
|
|
||||||
}
|
|
||||||
document.addEventListener('visibilitychange', f)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!goatcounter.no_events)
|
|
||||||
goatcounter.bind_events()
|
|
||||||
})
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
{{/* Katex support (enabled on specific pages). See 'helpers/katex.html' for more info. */}}
|
|
||||||
|
|
||||||
{{- if or .Params.math .Site.Params.math }}{{ partial "helpers/katex.html" . -}}{{- end -}}
|
|
||||||
|
|
||||||
{{/* Google analytics script. See config.toml to enable/disable this. */}}
|
|
||||||
{{- if hugo.IsProduction | or (eq site.Params.env "production") }}
|
|
||||||
{{ template "_internal/google_analytics.html" . }}
|
|
||||||
{{- end -}}
|
|
||||||
|
|
||||||
</head>
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 51e697bea7eb265c5b6bc532636bb4c707a84173
|
Loading…
Reference in New Issue