new deploy: 2023-10-01T17:44:58+00:00

This commit is contained in:
Aravinth Manivannan 2023-10-01 17:44:58 +00:00 committed by realaravinth
commit 9007fec1e5
22 changed files with 2876 additions and 0 deletions

3
404.html Normal file
View file

@ -0,0 +1,3 @@
<!doctype html>
<title>404 Not Found</title>
<h1>404 Not Found</h1>

10
elasticlunr.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
fabric-icons-inline.css Normal file
View file

@ -0,0 +1 @@
@font-face{font-family:'FabricMDL2Icons';src:url("data:application/octet-stream;base64,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") format("truetype")}.ms-Icon{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-family:'FabricMDL2Icons';font-style:normal;font-weight:normal;speak:none}.ms-Icon--ChevronRightSmall:before{content:"\E970"}.ms-Icon--ChromeClose:before{content:"\E8BB"}.ms-Icon--Copy:before{content:"\E8C8"}.ms-Icon--GlobalNavButton:before{content:"\E700"}.ms-Icon--MiniLink:before{content:"\E732"}.ms-Icon--Page:before{content:"\E7C3"}.ms-Icon--ProductRelease:before{content:"\EE2E"}.ms-Icon--Save:before{content:"\E74E"}.ms-Icon--Search:before{content:"\E721"}

View file

@ -0,0 +1,225 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | Events </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
checked />
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li class="active">
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
/>
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="events">Events</h1>
<p>Events are those operations that are performed on the Forge side,
such as Pull Requests, and Issues.</p>
<p>These events are operations of their own, and are handled within Interface
through Notifications.</p>
<p>The flow of processing an operation in the forge is done as follows,</p>
<ol>
<li>We poll for Notifications through the <a href="https://github.com/forgeflux-org/interface/blob/master/interface/runner/runner.py">Job Runner</a>.</li>
<li>Proceed to send over this Notification to the Events Endpoint, where the Notification is parsed, and processed.</li>
<li>After identification, it is converted into a event, PR or Issue.</li>
</ol>
<h2 id="references">References</h2>
<ul>
<li>Events Endpoint :: <a href="https://github.com/forgeflux-org/interface/blob/master/interface/runner/events.py">Info</a></li>
</ul>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

View file

@ -0,0 +1,246 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | How does it work? </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
checked />
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li class="active">
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
/>
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="how-does-it-work">How does it work?</h1>
<p>Bridges connect people, and so does ForgeFlux!</p>
<h2 id="interface">Interface</h2>
<p>The bridging component in ForgeFlux is called Interface.</p>
<p><a href="https://docs.forgeflux.org/services/interface/">Interfaces</a> are programs that run on either
side of the bridge, i.e, a bridge requires the participation of two
interfaces. Currently, Interfaces bridge the following operations:</p>
<ul>
<li>Pull Requests</li>
<li>Issues</li>
<li>Comments</li>
</ul>
<p>An Interface implementation for a software forge is able to
talk to the forge's API and speak <a href="https://activitypub.rocks/">ActivityPub
protocol</a> for server-to-server
communications. This architecture makes it possible to implement an
Interface for any forge setup.</p>
<h2 id="northstar">Northstar</h2>
<p>Since Interfaces run external to the forges, a method to find Interfaces
that service forges was required.</p>
<p><a href="https://docs.forgeflux.org/services/northstar/">Northstar</a> is a discovery service that maps an
Interface and the forge that it services. It acts very similar to DNS,
except instead of querying host names with intent to find corresponding
IP address, Northstar is queried with the forge's host name to discover
the Interfaces that service it.</p>
<h2 id="resources">Resources</h2>
<ul>
<li><a href="https://github.com/forgeflux-org/spec/blob/master/rfc/1-ecosystem-architecture/1-ecosystem-architecture.md">ecosystem-architecture</a>:
describes basic architecture and terminology used in ForgeFlux</li>
</ul>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<html>
<head>
<title>Zola</title>
</head>
<body>
<div class="container">
<h1>Welcome to Zola!</h1>
<p>
You're seeing this page because we couldn't find a template to render.
</p>
<p>
To modify this page, create a <b>section.html</b> file in the templates directory or
<a href="https://www.getzola.org/documentation/themes/installing-and-using-themes/" target="_blank">install a theme</a>.
<br>
You can find what variables are available in this template in the <a href="https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;templates&#x2F;pages-sections&#x2F;#section-variables" target="_blank">documentation</a>.
</p>
</div>
<footer>
<a href="https://www.getzola.org/documentation/getting-started/cli-usage/" target="_blank">Get started with Zola</a>
</footer>
<style>
html {
line-height: 1.5;
}
h1 {
margin-bottom: 2rem;
}
.container {
font-family: "sans-serif";
text-align: center;
margin-top: 20vh;
padding: 2rem;
background: #e9e9e9;
}
footer {
position: fixed;
width: 100%;
bottom: 1rem;
text-align: center;
}
</style>
</body>
</html>

View file

@ -0,0 +1,238 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | Services </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
checked />
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li class="active">
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
/>
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="services">Services</h1>
<p>The services that are currently in active development are Northstar, and Interface.
However, here's a few more details about them.</p>
<h2 id="northstar">Northstar</h2>
<ul>
<li>Repository :: <a href="https://github.com/forgeflux-org/northstar">Source Code</a></li>
<li>OpenAPI :: <a href="https://northstar.forgeflux.org/docs/openapi/">OpenAPI Specification</a></li>
</ul>
<p>ForgeFlux allows for multiple interfaces to be run against a single software forge.
Also, the protocol is flexible enough to support multiple types of software forges(GitLab, GitHub, etc).
The protocol's decentralised nature makes it impossible to create a constant record of which interfaces service forges.</p>
<p>So we created a discovery service which stores records of interfaces and the forges they service.
This is very similar to the way DNS works.
In DNS, hostname is resolved to IP address.</p>
<p>Here, software forge URL is resolved to URLs of <a href="https://github.com/forgeflux-org/interface">interfaces</a> that service the queried forge.</p>
<p>For an extensive view on Northstar, please check <a href="https://docs.forgeflux.org/services/northstar/">Northstar::Detailed</a></p>
<h2 id="interface">Interface</h2>
<ul>
<li>Repository :: <a href="https://github.com/forgeflux-org/interface">Source Code</a></li>
<li>OpenAPI :: <a href="https://github.com/forgeflux-org/interface/tree/master/docs/openapi">OpenAPI Specification</a></li>
</ul>
<p>Developing Free Software is about liberating users and giving them total control over how the programs they run should work.
It's only fair that developers of such software enjoy the same levels of liberty.</p>
<p>ForgeFlux is an attempt to enable federation for major software forges (GitLab, GitHub, Gitea, Source Hut, etc) entirely in API-space.
We believe our API-space implementation will allow for more organic growth as it will not require any involvement from the forge developers.</p>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

275
index.html Normal file
View file

@ -0,0 +1,275 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title>Docs</title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<img src="/logo.svg" alt="" />
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
/>
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
/>
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h2 id="status">Status&nbsp;<a class="anchor" href="#status">&#xE732;</a></h2>
<p>This site is Work-in-Progress, and as such, everything is in an
incomplete-state.</p>
<h2 id="source-code">Source code&nbsp;<a class="anchor" href="#source-code">&#xE732;</a></h2>
<p>Split between two forges, slowly migrating to self-hosted
<a href="https://forgejo.org">Forgejo</a> instance at
<a href="https://git.batsense.net">git.batsense.net</a></p>
<ol>
<li><a href="https://git.batsense.net/ForgeFlux">git.batsense.net</a></li>
<li><a href="https://github.com/forgeflux-org">GitHub</a></li>
</ol>
<h2 id="projects-overview">Projects Overview&nbsp;<a class="anchor" href="#projects-overview">&#xE732;</a></h2>
<h3 id="project-status-what-does-it-mean">Project Status: what does it mean?&nbsp;<a class="anchor" href="#project-status-what-does-it-mean">&#xE732;</a></h3>
<ol>
<li>WIP: Code isn't usable.</li>
<li>Usable: Code works, but user experience isn't polished. Can be used
with a bit of patience ;)</li>
<li>Production: Ready for use</li>
</ol>
<h3 id="1-interface">1. Interface&nbsp;<a class="anchor" href="#1-interface">&#xE732;</a></h3>
<ul>
<li><a href="https://github.com/forgeflux-org/interface">Source code</a></li>
<li>Status: WIP</li>
<li>Description: API-space software forge federation implementation.</li>
</ul>
<p>Federation will take time to implement in most, popular software forge
implementations. Interface aims to use the forge's REST API or similar
and create a federation layer on top of it.</p>
<p>Currently, implementation has minimal support for Forgejo and Gitea. A
Forgejo user can be exposed to Fediverse through WebFinger using
Interface.</p>
<h3 id="2-northstar">2. Northstar&nbsp;<a class="anchor" href="#2-northstar">&#xE732;</a></h3>
<ul>
<li><a href="https://github.com/forgeflux-org/northstar">Source code</a></li>
<li>Status: Production</li>
<li>Description: A lookup service for federating software forges</li>
<li>Flagship instance: <a href="https://northstar.forgeflux.org">northstar.forgeflux.org</a></li>
</ul>
<p>Interface's API-based, external, third-party approach introduces a
unique problem: how to locate the internet address (hostname) of the
Interface that services a forgege? Enter Northstar. It is a simple
Key-Value search server that maps forges and internfaces</p>
<h3 id="3-starchart">3. Starchart&nbsp;<a class="anchor" href="#3-starchart">&#xE732;</a></h3>
<ul>
<li><a href="https://github.com/forgeflux-org/starchart">Source code</a></li>
<li>Status: Usable</li>
<li>Description: Spider and search engine for federating forges</li>
<li>Flagship instance:
<a href="https://starchart.forgeflux.org">starchart.forgeflux.org</a></li>
</ul>
<p>Projects on centralized forges like GitHub and GitLab enjoy good
visibility through network effect, good search engine indexing and
through third-party tools like
<a href="https://awesomeopensource.com/">awesomeopensource.com/</a>.</p>
<p>Starchart aims to provide high-visibility for projects on independently
hosted forges by indexing them and exposing the index with a searchable
index. The index is designed to be replicated, so that new Starchart
instances can be bootstrapped from an existing Starchart instance's
data.</p>
<h3 id="4-f3-rs">4. f3-rs&nbsp;<a class="anchor" href="#4-f3-rs">&#xE732;</a></h3>
<ul>
<li><a href="https://git.batsense.net/ForgeFlux/f3-rs">Source code</a></li>
<li>Status: WIP</li>
<li>Description: Rust port of the <a href="https://f3.forgefriends.org/">Friendly Forge Format</a> library</li>
<li>Documentation link: <a href="https://forgeflux.org">f3.forgeflux.org</a></li>
</ul>
<h3 id="4-ftest">4. ftest&nbsp;<a class="anchor" href="#4-ftest">&#xE732;</a></h3>
<ul>
<li><a href="https://git.batsense.net/ForgeFlux/ftest">Source code</a></li>
<li>Status: Usable</li>
<li>Description: Compliance checker/test runner for <a href="https://activitypub.rocks">ActivityPub</a> and by
extension, <a href="https://forgefed.org">ForgeFed</a></li>
</ul>
<p>The idea is to create something similar to
<a href="https://github.com/matrix-org/sytest">matrix-org/sytest</a>, but for
ActivityPub and ForgeFed. This way, we'll be able to measure how
compliant an implementation is to the specifications, which we hope will
improve interoperability between instances.</p>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

295
js.js Normal file
View file

@ -0,0 +1,295 @@
// search script, borrowed from book theme
function debounce(func, wait) {
var timeout;
return function () {
var context = this;
var args = arguments;
clearTimeout(timeout);
timeout = setTimeout(function () {
timeout = null;
func.apply(context, args);
}, wait);
};
}
// Taken from mdbook
// The strategy is as follows:
// First, assign a value to each word in the document:
// Words that correspond to search terms (stemmer aware): 40
// Normal words: 2
// First word in a sentence: 8
// Then use a sliding window with a constant number of words and count the
// sum of the values of the words within the window. Then use the window that got the
// maximum sum. If there are multiple maximas, then get the last one.
// Enclose the terms in <b>.
function makeTeaser(body, terms) {
var TERM_WEIGHT = 40;
var NORMAL_WORD_WEIGHT = 2;
var FIRST_WORD_WEIGHT = 8;
var TEASER_MAX_WORDS = 30;
var stemmedTerms = terms.map(function (w) {
return elasticlunr.stemmer(w.toLowerCase());
});
var termFound = false;
var index = 0;
var weighted = []; // contains elements of ["word", weight, index_in_document]
// split in sentences, then words
var sentences = body.toLowerCase().split(". ");
for (var i in sentences) {
var words = sentences[i].split(" ");
var value = FIRST_WORD_WEIGHT;
for (var j in words) {
var word = words[j];
if (word.length > 0) {
for (var k in stemmedTerms) {
if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) {
value = TERM_WEIGHT;
termFound = true;
}
}
weighted.push([word, value, index]);
value = NORMAL_WORD_WEIGHT;
}
index += word.length;
index += 1; // ' ' or '.' if last word in sentence
}
index += 1; // because we split at a two-char boundary '. '
}
if (weighted.length === 0) {
return body;
}
var windowWeights = [];
var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS);
// We add a window with all the weights first
var curSum = 0;
for (var i = 0; i < windowSize; i++) {
curSum += weighted[i][1];
}
windowWeights.push(curSum);
for (var i = 0; i < weighted.length - windowSize; i++) {
curSum -= weighted[i][1];
curSum += weighted[i + windowSize][1];
windowWeights.push(curSum);
}
// If we didn't find the term, just pick the first window
var maxSumIndex = 0;
if (termFound) {
var maxFound = 0;
// backwards
for (var i = windowWeights.length - 1; i >= 0; i--) {
if (windowWeights[i] > maxFound) {
maxFound = windowWeights[i];
maxSumIndex = i;
}
}
}
var teaser = [];
var startIndex = weighted[maxSumIndex][2];
for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) {
var word = weighted[i];
if (startIndex < word[2]) {
// missing text from index to start of `word`
teaser.push(body.substring(startIndex, word[2]));
startIndex = word[2];
}
// add <em/> around search terms
if (word[1] === TERM_WEIGHT) {
teaser.push("<b>");
}
startIndex = word[2] + word[0].length;
teaser.push(body.substring(word[2], startIndex));
if (word[1] === TERM_WEIGHT) {
teaser.push("</b>");
}
}
teaser.push("…");
return teaser.join("");
}
function formatSearchResultItem(item, terms) {
var li = document.createElement("li");
li.classList.add("search-results__item");
li.innerHTML = `<a href="${item.ref}">${item.doc.title}</a>`;
li.innerHTML += `<div class="search-results__teaser">${makeTeaser(item.doc.body, terms)}</div>`;
return li;
}
// Go from the book view to the search view
function toggleSearchMode() {
var $wrapContent = document.querySelector("#wrap");
var $searchIcon = document.querySelector("#search-ico");
var $searchContainer = document.querySelector(".search-container");
if ($searchContainer.classList.contains("search-container--is-visible")) {
$searchContainer.classList.remove("search-container--is-visible");
$wrapContent.style.display = "";
$searchIcon.className = "ms-Icon--Search";
} else {
$searchContainer.classList.add("search-container--is-visible");
$wrapContent.style.display = "none";
$searchIcon.className = "ms-Icon--ChromeClose";
document.getElementById("search").focus();
}
}
function initSearch() {
var $searchInput = document.getElementById("search");
if (!$searchInput) {
return;
}
var $searchIcon = document.querySelector("#search-ico");
$searchIcon.addEventListener("click", toggleSearchMode);
var $searchResults = document.querySelector(".search-results");
var $searchResultsHeader = document.querySelector(".search-results__header");
var $searchResultsItems = document.querySelector(".search-results__items");
var MAX_ITEMS = 100;
var options = {
bool: "AND",
fields: {
title: {boost: 2},
body: {boost: 1},
}
};
var currentTerm = "";
var index = elasticlunr.Index.load(window.searchIndex);
$searchInput.addEventListener("keyup", debounce(function() {
var term = $searchInput.value.trim();
if (term === currentTerm || !index) {
return;
}
$searchResults.style.display = term === "" ? "none" : "block";
$searchResultsItems.innerHTML = "";
if (term === "") {
return;
}
var results = index.search(term, options).filter(function (r) {
return r.doc.body !== "";
});
if (results.length === 0) {
$searchResultsHeader.innerText = `Nothing like «${term}»`;
return;
}
currentTerm = term;
$searchResultsHeader.innerText = `${results.length} found for «${term}»:`;
for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) {
if (!results[i].doc.body) {
continue;
}
// var item = document.createElement("li");
// item.innerHTML = formatSearchResultItem(results[i], term.split(" "));
console.log(results[i]);
$searchResultsItems.appendChild(formatSearchResultItem(results[i], term.split(" ")));
}
}, 150));
}
if (document.readyState === "complete" ||
(document.readyState !== "loading" && !document.documentElement.doScroll)
) {
initSearch();
} else {
document.addEventListener("DOMContentLoaded", initSearch);
}
// mobile
function burger() {
let x = document.querySelector("#trees");
let y = document.querySelector("#mobile");
if (x.style.display === "block") {
x.style.display = "none";
y.className = "ms-Icon--GlobalNavButton";
} else {
x.style.display = "block";
y.className = "ms-Icon--ChromeClose";
}
}
// https://aaronluna.dev/blog/add-copy-button-to-code-blocks-hugo-chroma/
function createCopyButton(highlightDiv) {
const button = document.createElement("button");
button.className = "copy-code-button ";
button.type = "button";
button.innerHTML = "&#xE8C8;";
button.addEventListener("click", () =>
copyCodeToClipboard(button, highlightDiv)
);
addCopyButtonToDom(button, highlightDiv);
}
async function copyCodeToClipboard(button, highlightDiv) {
const codeToCopy = highlightDiv.querySelector(":last-child > code")
.innerText;
try {
result = await navigator.permissions.query({ name: "clipboard-write" });
if (result.state == "granted" || result.state == "prompt") {
await navigator.clipboard.writeText(codeToCopy);
} else {
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
}
} catch (_) {
copyCodeBlockExecCommand(codeToCopy, highlightDiv);
} finally {
codeWasCopied(button);
}
}
function copyCodeBlockExecCommand(codeToCopy, highlightDiv) {
const textArea = document.createElement("textArea");
textArea.contentEditable = "true";
textArea.readOnly = "false";
textArea.className = "copyable-text-area";
textArea.value = codeToCopy;
highlightDiv.insertBefore(textArea, highlightDiv.firstChild);
const range = document.createRange();
range.selectNodeContents(textArea);
const sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
textArea.setSelectionRange(0, 999999);
document.execCommand("copy");
highlightDiv.removeChild(textArea);
}
function codeWasCopied(button) {
button.blur();
button.innerHTML = "&#xE74E;";
setTimeout(function () {
button.innerHTML = "&#xE8C8;";
}, 2000);
}
function addCopyButtonToDom(button, highlightDiv) {
highlightDiv.insertBefore(button, highlightDiv.firstChild);
const wrapper = document.createElement("div");
wrapper.className = "highlight-wrapper";
highlightDiv.parentNode.insertBefore(wrapper, highlightDiv);
wrapper.appendChild(highlightDiv);
}
document
.querySelectorAll("pre")
.forEach((highlightDiv) => createCopyButton(highlightDiv));

1
logo.svg Normal file
View file

@ -0,0 +1 @@
<svg id="a45af197-b8b6-4c91-9128-4abb56b81e95" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 372.66 53.32"><defs><style>.a95b92e2-21b6-4941-aebf-1e24593560e5{fill:#ee362d;}.b31c35f1-b68c-4767-9b42-fc6f08b15844{fill:#6d6f6e;}.b010529f-8534-4670-9bfc-0c669400821a{fill:#6d6e70;}</style></defs><rect class="a95b92e2-21b6-4941-aebf-1e24593560e5" x="5.74" y="2.85" width="38.79" height="10.38" rx="1.94"/><rect class="a95b92e2-21b6-4941-aebf-1e24593560e5" x="5.74" y="21.55" width="24.59" height="10.38" rx="1.94"/><rect class="b31c35f1-b68c-4767-9b42-fc6f08b15844" x="40.61" y="21.55" width="24.59" height="10.38" rx="1.94"/><rect class="a95b92e2-21b6-4941-aebf-1e24593560e5" x="5.74" y="40.09" width="10.38" height="10.38" rx="1.94"/><rect class="b31c35f1-b68c-4767-9b42-fc6f08b15844" x="54.83" y="2.85" width="10.38" height="10.38" rx="1.94"/><rect class="b31c35f1-b68c-4767-9b42-fc6f08b15844" x="26.42" y="40.09" width="38.79" height="10.38" rx="1.94"/><path class="a95b92e2-21b6-4941-aebf-1e24593560e5" d="M89.68,14.18V27.41h19v4.66h-19V47.42H84.26v-38h26.79v4.72Z"/><path class="a95b92e2-21b6-4941-aebf-1e24593560e5" d="M115.75,33.22c0-8.4,6.6-14.6,15.45-14.6s15.45,6.2,15.45,14.6-6.55,14.6-15.45,14.6S115.75,41.62,115.75,33.22Zm26,0a10.55,10.55,0,0,0-21.1,0,10.55,10.55,0,0,0,21.1,0Z"/><path class="a95b92e2-21b6-4941-aebf-1e24593560e5" d="M173.2,47.42l-6.1-8.5a10.87,10.87,0,0,1-1.3,0h-6.75v8.45H154.2V19h11.6C173.25,19,178,22.67,178,29a9.09,9.09,0,0,1-6.25,9l6.75,9.4ZM173.05,29c0-3.85-2.6-6-7.55-6h-6.45V35h6.45C170.45,35,173.05,32.87,173.05,29Z"/><path class="a95b92e2-21b6-4941-aebf-1e24593560e5" d="M205.46,33.07h4.7v11.1a17.2,17.2,0,0,1-10.95,3.65c-9.05,0-15.65-6.2-15.65-14.6s6.6-14.6,15.45-14.6c5,0,8.8,1.45,11.45,4.45l-3.1,3.15a10.87,10.87,0,0,0-8.25-3.4c-6.15,0-10.65,4.35-10.65,10.4s4.5,10.4,10.8,10.4a11.58,11.58,0,0,0,6.2-1.6Z"/><path class="a95b92e2-21b6-4941-aebf-1e24593560e5" d="M240.71,43.37v4.05h-21.3V19h20.75v4h-15.9v8h14.15V35H224.26v8.4Z"/><path class="b010529f-8534-4670-9bfc-0c669400821a" d="M254.69,14.18V27.41h19v4.66h-19V47.42h-5.43v-38h26.79v4.72Z"/><path class="b010529f-8534-4670-9bfc-0c669400821a" d="M283.4,19h4.85V43.37H303.5v4.05H283.4Z"/><path class="b010529f-8534-4670-9bfc-0c669400821a" d="M308.35,35.27V19h4.85V35.17c0,5.55,2.7,8.45,7.65,8.45s7.65-2.85,7.65-8.45V19h4.76V35.27c0,7.95-4.66,12.55-12.46,12.55S308.35,43.22,308.35,35.27Z"/><path class="b010529f-8534-4670-9bfc-0c669400821a" d="M360.16,47.42l-8.05-11-8.15,11h-5.55l11-14.55L339.06,19h5.45l7.65,10.3,7.6-10.3h5.4l-10.35,13.8,10.95,14.6Z"/></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

1
main.css Normal file

File diff suppressed because one or more lines are too long

3
robots.txt Normal file
View file

@ -0,0 +1,3 @@
User-agent: *
Allow: /
Sitemap: https://docs.forgeflux.org/sitemap.xml

1
search_index.en.js Normal file

File diff suppressed because one or more lines are too long

43
services/index.html Normal file
View file

@ -0,0 +1,43 @@
<html>
<head>
<title>Zola</title>
</head>
<body>
<div class="container">
<h1>Welcome to Zola!</h1>
<p>
You're seeing this page because we couldn't find a template to render.
</p>
<p>
To modify this page, create a <b>section.html</b> file in the templates directory or
<a href="https://www.getzola.org/documentation/themes/installing-and-using-themes/" target="_blank">install a theme</a>.
<br>
You can find what variables are available in this template in the <a href="https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;templates&#x2F;pages-sections&#x2F;#section-variables" target="_blank">documentation</a>.
</p>
</div>
<footer>
<a href="https://www.getzola.org/documentation/getting-started/cli-usage/" target="_blank">Get started with Zola</a>
</footer>
<style>
html {
line-height: 1.5;
}
h1 {
margin-bottom: 2rem;
}
.container {
font-family: "sans-serif";
text-align: center;
margin-top: 20vh;
padding: 2rem;
background: #e9e9e9;
}
footer {
position: fixed;
width: 100%;
bottom: 1rem;
text-align: center;
}
</style>
</body>
</html>

View file

@ -0,0 +1,265 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | Interface </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
checked />
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li class="active">
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
/>
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
/>
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="interface">Interface&nbsp;<a class="anchor" href="#interface">&#xE732;</a></h1>
<p>Interface is a service that acts as a connecting end of the bridge, listening
in for Notifications from a particular forge repository.</p>
<p>These notifications, which may be in the form of a Comment, Issue, or Pull Request,
are then further defined into <a href="https://docs.forgeflux.org/getting-started/events/">Events</a> to create
a workable unit set, that the interface can use to translate operations from
one forge to another forge.</p>
<p>The procedure of the Notification-Event Translation System, works as follows,</p>
<ol>
<li>Upon creation of the Interface, and set up of a forge repository to look for, the interface subscribes to the forge's notifications.</li>
<li>Every notification received by the interface from the forges, is then identified and translated into it's respective <code>Event</code> model, be it an Issue or PR.</li>
<li>Upon conversion into the respective model, Interface processes these <code>Events</code>, and converts them into the model required for the destination forge.</li>
</ol>
<h2 id="setting-up-the-development-environment">Setting up the Development Environment&nbsp;<a class="anchor" href="#setting-up-the-development-environment">&#xE732;</a></h2>
<p>In order to test out and utilise the Northstar lookup service, we will need to set
up an interface to be run on the local machine. There are a few configuration
changes that must be made for the interface to be recognized by the lookup service.</p>
<p>Changes to the <code>config/settings.toml</code>,</p>
<pre data-lang="toml" style="background-color:#eff1f5;color:#4f5b66;" class="language-toml "><code class="language-toml" data-lang="toml"><span>[default.system]
</span><span style="color:#bf616a;">northstar </span><span>= &quot;</span><span style="color:#a3be8c;">http://computer.domain.com:port</span><span>&quot;
</span><span>
</span><span>[default.server]
</span><span style="color:#bf616a;">url </span><span>= &quot;</span><span style="color:#a3be8c;">http://computer.domain.com:port</span><span>&quot;
</span></code></pre>
<p>Note that the port assigned to the interface and northstar must not already be in
use by another application/service, and that you can find out the hostname for
your system through the following command,</p>
<pre data-lang="sh" style="background-color:#eff1f5;color:#4f5b66;" class="language-sh "><code class="language-sh" data-lang="sh"><span style="color:#bf616a;">hostname --fqdn
</span></code></pre>
<p>There are a few more settings to add in, as a means to validate the user who hosts
the interface, this also depends on the forge of your choosing. As of right now,
<code>interface</code> supports only gitea, and we can fill up the <code>config/settings.toml</code>,
with the same.</p>
<pre data-lang="toml" style="background-color:#eff1f5;color:#4f5b66;" class="language-toml "><code class="language-toml" data-lang="toml"><span>[default]
</span><span style="color:#bf616a;">forge </span><span>= &quot;</span><span style="color:#a3be8c;">gitea</span><span>&quot;
</span><span>
</span><span>[default.gitea]
</span><span style="color:#bf616a;">host </span><span>= &quot;</span><span style="color:#a3be8c;">https://gitea.com</span><span>&quot;
</span><span style="color:#bf616a;">api_key </span><span>= &quot;</span><span style="color:#a3be8c;">generate-the-api-key-from-gitea-and-paste-here</span><span>&quot;
</span><span style="color:#bf616a;">username </span><span>= &quot;</span><span style="color:#a3be8c;">fluxer101</span><span>&quot;
</span><span style="color:#bf616a;">password </span><span>= &quot;</span><span style="color:#a3be8c;">flux101</span><span>&quot;
</span></code></pre>
<p>Note that the API key in Gitea is known as an access token, one which can be
generated <a href="https://gitea.com/user/settings/applications">here</a>.</p>
<h2 id="faq">FAQ&nbsp;<a class="anchor" href="#faq">&#xE732;</a></h2>
<h3 id="why-does-an-integrity-error-show-up">Why does an integrity error show up?&nbsp;<a class="anchor" href="#why-does-an-integrity-error-show-up">&#xE732;</a></h3>
<p>As ForgeFlux's Interface is an actively developing project, there are a few
errors that are caused by an upgrade to the database, in which case integrity errors
are bound to pop up. In this case, remove the <code>instance/</code> directory where the database
for the service would be stored, to rebuild it the next time the application is run.</p>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

View file

@ -0,0 +1,217 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | Northstar </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
checked />
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li class="active">
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
/>
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
/>
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="northstar">Northstar&nbsp;<a class="anchor" href="#northstar">&#xE732;</a></h1>
<p>Northstar is a lookup service, which acts as a source of information
for interfaces which hold particular forge information.</p>
<p>An <a href="https://docs.forgeflux.org/services/interface/">Interface</a> connects and looks
through an instance of Northstar, to find the appropriate the forge
information that it seeks.</p>
<p>An instance of Northstar has the functionality to act as an API to
register and provide forge information.
These routes/payloads are covered in the <a href="https://northstar.forgeflux.org/docs/openapi/">OpenAPI specification</a>
for Northstar.</p>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

42
sitemap.xml Normal file
View file

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://docs.forgeflux.org/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/getting-started/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/getting-started/events/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/getting-started/how/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/getting-started/services/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/services/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/services/interface/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/services/northstar/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/updates/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/updates/december2020/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/updates/november2020/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/updates/october2020/</loc>
</url>
<url>
<loc>https://docs.forgeflux.org/updates/september2020/</loc>
</url>
</urlset>

View file

@ -0,0 +1,241 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | December 2020 </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
/>
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
checked />
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li class="active">
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="december-2020">December 2020</h1>
<h2 id="northstar">Northstar</h2>
<p>As the development on <a href="https://docs.forgeflux.org/services/northstar/">Northstar</a> nears the completion phase,
updates on it have slowed down, and the only updates that were made during this
stage mostly comprises of configuration updates.
These updates were mostly related to bootstrapping <a href="https://www.dynaconf.com/">DynaConf</a>,
as we embraced 12-factor app configuration recommendations, allowing for better
configuration management.</p>
<h2 id="interface">Interface</h2>
<p>Realising the need for validation of a request to an actor, an authentication
mechanism was developed to implement Matrix's <a href="https://github.com/matrix-org/python-signedjson">signed JSON</a>
feature, but, was later replaced in favor of <a href="https://tools.ietf.org/html/draft-cavage-http-signatures">HTTP Signatures</a>.</p>
<p>Interface underwent major refactoring to improve test-ability and reliability in addition
to implementing authentication by a <a href="https://github.com/matrix-org/python-signedjson">signed JSON</a>
mechanism implemented by the Matrix project. Taking note of rate-limits imposed by some forges,
we figured we'd have to cache responses and so data persistence was implemented by way of
storing in a database.</p>
<h2 id="references">References</h2>
<p>These are a list of the Pull Requests where the following updates took place for the
organization.</p>
<ul>
<li>Forking Implementation :: <a href="https://github.com/forgeflux-org/interface/commit/5c9f61d60ce069963da7abc761b9ba3d81c8883a">#34</a></li>
<li>Authentication :: <a href="https://github.com/forgeflux-org/interface/commit/5cc206cbe5be83cedac14949a537baad4c6351e3">#36</a></li>
<li>DB Refactor :: <a href="https://github.com/forgeflux-org/interface/commit/57c9a085b38f8c3bab7975e18d21e4455ad3cac9">#39</a>, <a href="https://github.com/forgeflux-org/interface/commit/d9d785ca116e9a2bb9a40cf3eaa16a8b275d1593">#40</a></li>
</ul>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

43
updates/index.html Normal file
View file

@ -0,0 +1,43 @@
<html>
<head>
<title>Zola</title>
</head>
<body>
<div class="container">
<h1>Welcome to Zola!</h1>
<p>
You're seeing this page because we couldn't find a template to render.
</p>
<p>
To modify this page, create a <b>section.html</b> file in the templates directory or
<a href="https://www.getzola.org/documentation/themes/installing-and-using-themes/" target="_blank">install a theme</a>.
<br>
You can find what variables are available in this template in the <a href="https:&#x2F;&#x2F;www.getzola.org&#x2F;documentation&#x2F;templates&#x2F;pages-sections&#x2F;#section-variables" target="_blank">documentation</a>.
</p>
</div>
<footer>
<a href="https://www.getzola.org/documentation/getting-started/cli-usage/" target="_blank">Get started with Zola</a>
</footer>
<style>
html {
line-height: 1.5;
}
h1 {
margin-bottom: 2rem;
}
.container {
font-family: "sans-serif";
text-align: center;
margin-top: 20vh;
padding: 2rem;
background: #e9e9e9;
}
footer {
position: fixed;
width: 100%;
bottom: 1rem;
text-align: center;
}
</style>
</body>
</html>

View file

@ -0,0 +1,230 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | November 2020 </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
/>
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
checked />
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li class="active">
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="november-2020">November 2020</h1>
<p>Errors were modularized at the back of <a href="https://github.com/forgeflux-org/northstar/">Northstar</a>,
and A Docker CI was set up for the Northstar builds.</p>
<p>A <a href="https://github.com/forgeflux-org">GitHub organization</a> was created for ForgeFedv2,
and the repositories for the projects were transferred over to it.</p>
<p>A Notification-Event Translation Mechanism was set up.</p>
<ol>
<li>Northstar functionality was integrated into Interface, and tests were set up to ensure that it could be contacted through Interface's methods.</li>
<li>A locking mechanism was set up for concurrent operations on Git utilizing <a href="https://sled.rs/">Sled</a>.</li>
<li>Implementations of a basic job runner was set up to mimic retrieving requests from Forges, through periodically retrieving notifications.</li>
<li>The endpoints for notifications was subsequently set up, and responses to these Notifications were termed as <a href="https://docs.forgeflux.org/getting-started/events/">events</a>.</li>
<li>The endpoints for processing these events were then created.</li>
</ol>
<p>Shifted over the configuration management to <a href="https://www.dynaconf.com/">Dynaconf</a>.</p>
<h2 id="references">References</h2>
<ul>
<li>Integration with Northstar :: <a href="https://github.com/forgeflux-org/interface/commit/0c9d8bdff05e668d77a85fdfc89b37abe1ac86cb">Info</a></li>
<li>Locking Mechanism with Sled :: <a href="https://github.com/forgeflux-org/interface/commit/d3e7c81c95d87b612ebb9562cac31d371fe8629e">Info</a></li>
<li>Defining Events :: <a href="https://github.com/forgeflux-org/interface/commit/30547b783578a7a9548aca55b3b7c932ed8130e6">Info</a></li>
</ul>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

View file

@ -0,0 +1,238 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | October 2020 </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
/>
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
checked />
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li class="active">
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="october-2020">October 2020</h1>
<p>In the month of October, there were significant changes to the development
in ForgeFedv2, with the addition of the <a href="https://forgeflux-org.github.io/northstar/">OpenAPI Specification</a>
for Northstar.</p>
<h2 id="northstar">Northstar</h2>
<p>A database model was created to store the details of the various forge interfaces,
having these details would be a prerequisite to looking up a server.</p>
<p>Endpoints were subsequently created, following the defined OpenAPI specification.
While the Lookup service was in the process of development, terminologies and the
concept for Forge Federation was also being <a href="https://github.com/forgeflux-org/spec/tree/master/rfc">discussed</a>.</p>
<p>Docker support as part of the CI process was added into the mix, while
keeping in mind, that the test suite was the method to work with the application for
the time being.
An initial working model for the lookup service was established.</p>
<h2 id="interface">Interface</h2>
<p>Development of the <code>libgit</code> library had begun at this point.</p>
<p>[libgit] is a library that processes the contributor's changes, and generates a patch.
Details regarding the implementation and feature set of libgit will be covered in another section.</p>
<h2 id="references">References</h2>
<ul>
<li>Database Initialization :: <a href="https://github.com/forgeflux-org/northstar/commit/6a82a1bc83d4733a5a077e33ad0c222aed496145">database init</a></li>
</ul>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>

View file

@ -0,0 +1,215 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://docs.forgeflux.org/main.css">
<link rel="icon" href="https://www.getzola.org/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<title> Docs | September 2020 </title>
</head>
<body>
<script>
fetch('https://api.github.com/repos/getzola/zola/releases/latest')
.then((response) => {
return response.json();
})
.then((data) => {
let release_name = data.name;
let html_url = data.html_url;
release.innerHTML = `<a href='${html_url}'>${release_name}</a>`;
});
</script>
<main>
<nav>
<a href="https:&#x2F;&#x2F;docs.forgeflux.org">
<img src="/logo.svg" alt="" />
</a>
<div id="release"></div>
<a href="javascript:void(0);" onclick="burger()" id="mobile" class="ms-Icon--GlobalNavButton"></a>
<div id="trees">
<input class="tree-toggle" type="checkbox" id="services"
/>
<label class="tree-toggle-label" for="services">Services</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/services/interface/">Interface</a>
</li>
<li >
<a href="https://docs.forgeflux.org/services/northstar/">Northstar</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="getting-started"
/>
<label class="tree-toggle-label" for="getting-started">Getting Started</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/getting-started/services/">Services</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/events/">Events</a>
</li>
<li >
<a href="https://docs.forgeflux.org/getting-started/how/">How does it work?</a>
</li>
</ul>
<input class="tree-toggle" type="checkbox" id="updates"
checked />
<label class="tree-toggle-label" for="updates">Updates</label>
<ul class="subtree">
<li >
<a href="https://docs.forgeflux.org/updates/december2020/">December 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/november2020/">November 2020</a>
</li>
<li >
<a href="https://docs.forgeflux.org/updates/october2020/">October 2020</a>
</li>
<li class="active">
<a href="https://docs.forgeflux.org/updates/september2020/">September 2020</a>
</li>
</ul>
</div>
</nav>
<article>
<div id="on_right">
<span id="search-ico" class="ms-Icon--Search"></span>
</div>
<div class="search-container">
<input id="search" type="search" placeholder="Search as you type...">
<div class="search-results">
<div class="search-results__header"></div>
<ul class="search-results__items"></ul>
</div>
</div>
<div id="wrap">
<h1 id="september-2020">September 2020</h1>
<p>In the month of September, project &quot;ForgeFedv2&quot; started off by
initializing the lookup service, <a href="https://github.com/forgeflux-org/northstar/">Northstar</a>.</p>
<p>The initialization mostly comprised of setting up the CI environment,
and focused more on defining the structure of the project, and how
we were to be going about it.</p>
<p>A discussion on the terminology and the primitive method of the
project's functionality were discussed.</p>
</div>
</article>
</main>
<script type="text/javascript" src="https://docs.forgeflux.org/elasticlunr.min.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/search_index.en.js" defer></script>
<script type="text/javascript" src="https://docs.forgeflux.org/js.js" defer></script>
</body>
</html>