2022-02-01 15:08:16 +00:00
{% extends 'base.html' %}
{% block title %}
2022-09-14 17:33:05 +00:00
Downloads | {{ config.title }}
2022-02-01 15:08:16 +00:00
{% endblock %}
{% block content %}
< section id = "download-section" class = "section" >
2022-02-01 16:17:01 +00:00
< div class = "relative w-full py-8 flex flex-col items-center justify-center bg-gray-50 shadow-sm" >
2023-05-26 06:43:55 +00:00
< h1 class = "text-aerogramme-blue font-bold text-2xl text-center" > Download Aerogramme< / h1 >
2022-02-01 17:30:04 +00:00
< div class = "absolute -bottom-8 left-1/2 transform -translate-x-6 w-16 overflow-hidden inline-block" >
2022-02-01 16:17:01 +00:00
< div class = "h-8 w-8 bg-gradient-to-bl from-gray-50 via-gray-50 to-gray-100 -rotate-45 transform origin-top-left shadow" > < / div >
2022-02-01 15:08:16 +00:00
< / div >
2022-02-01 16:17:01 +00:00
< / div >
2022-02-01 17:30:04 +00:00
< div class = "mx-auto max-w-7xl px-4" >
2023-05-26 06:43:55 +00:00
< div id = "releases-container" class = "py-20 space-y-20" >
< div class = "mt-8 bg-gray-50 border border-gray-200 p-4 rounded shadow-sm" >
<!-- choose version -->
< div class = "flex flex-row space-x-6 py-4 border-gray-400 border-b items-center" >
< div >
< img style = "height: 48px" src = "/logo/aerogramme-blue-sq.svg" / >
< / div >
< div >
< label > Channel: < / label >
< select class = "inline-block rounded font-extrabold p-3 bg-transparent hover:bg-blue-300 transition-all duration-300 cursor-pointer" >
< option value = "production" > Production< / option >
< option value = "testing" > Testing< / option >
< option value = "nightly" > Nightly< / option >
< / select >
< / div >
< div >
< label > Version: < / label >
< select class = "inline-block rounded font-extrabold p-3 bg-transparent hover:bg-blue-300 transition-all duration-300 cursor-pointer" >
< option value = "0.0.1" > 0.0.1< / option >
< / select >
< / div >
< div >
Date: 2023-01-01
< / div >
< / div >
2022-02-01 15:08:16 +00:00
2023-05-26 06:43:55 +00:00
< div class = "flex flex-row space-x-6" >
<!-- choose distribution method -->
2023-06-01 09:16:20 +00:00
< div id = "install-choice" class = "border-r pr-5 border-gray-400" >
< button id = "selected-btn" class = "block bg-gradient-to-tl from-aerogramme-blue via-blue-500 to-blue-300 bg-size-200 bg-pos-0 hover:bg-pos-100 rounded p-4 mt-4 text-sm mb-1 uppercase text-white w-full text-left transition-all duration-200 hidden" > Selected< / button >
< button id = "alternative-btn" class = "block p-4 mt-4 text-sm mb-1 uppercase text-gray-600 w-full text-left hover:bg-pos-100 rounded hover:text-white hover:bg-gradient-to-tl from-aerogramme-blue to-blue-500 transition-all duration-200 hidden" > Alternative< / button >
2023-05-26 06:43:55 +00:00
< / div >
2022-02-01 15:08:16 +00:00
2023-05-26 06:43:55 +00:00
<!-- docker page -->
2023-06-01 09:16:20 +00:00
< div id = "docker" class = "block" >
2023-05-26 06:43:55 +00:00
< div class = "block mt-4" >
< label > Mirror: < / label >
< select class = "inline-block rounded font-extrabold p-3 bg-transparent hover:bg-blue-300 transition-all duration-300 cursor-pointer" >
< option value = "df" > registry.deuxfleurs.org< / option >
< option value = "docker" > docker.io< / option >
< / select >
< / div >
2022-02-01 15:08:16 +00:00
2023-05-26 06:43:55 +00:00
< div class = "block mt-4 p-5 bg-black text-gray-100" >
< pre class = "block" > docker pull registry.deuxfleurs.org/aerogramme:0.0.1< / pre >
< / div >
< p class = "mt-4" > Aerogramme is available as a minimalist docker image (~20MB) that contains only the static binary. It means that you can't run < code > bash< / code > or any other shell in the container.< / p >
< p class = "mt-4" > Network resources are finite. Please avoid wasting them by re-downloading the image each time you start a container. Keep a local cache or mirror the image on your private registry. In case of abuse, we may put some agressive rate limiting based on IP prefixes.< / p >
< / div >
2022-02-01 15:08:16 +00:00
2023-05-26 06:43:55 +00:00
<!-- binaries page -->
2023-06-01 09:16:20 +00:00
< div id = "static" class = "hidden" >
2023-05-26 06:43:55 +00:00
< div class = "mt-4 flex flex-row space-x-6 items-center" >
< div class = "block" >
OS: linux
< / div >
< div class = "block" >
< label > Architecture: < / label >
< select class = "inline-block rounded font-extrabold p-3 bg-transparent hover:bg-blue-300 transition-all duration-300 cursor-pointer" >
< option value = "amd64" > amd64 (x86_64)< / option >
< option value = "aarch64" > arm64 (aarch64)< / option >
< option value = "armv6l" > arm (armv6l)< / option >
< / select >
< / div >
< div class = "block" >
Mirror: download.deuxfleurs.org
< / div >
< / div >
2022-02-01 15:08:16 +00:00
2023-05-26 06:43:55 +00:00
< div class = "block mt-4 p-5 bg-black text-gray-100" >
< pre class = "block" > curl https://download.deuxfleurs.org/df-dist-v1/aerogramme/0.0.1/linux/amd64/aerogramme -o aerogramme
chmod +x aerogramme< / pre >
< / div >
< p class = "mt-4" > Aerogramme is distributed as a statically compiled binary (~20MB).< / p >
< p class = "mt-4" > Network resources are finite. Please avoid wasting them by re-downloading the binary too often. Keep a local cache or mirror the binary on your infrastructure. In case of abuse, we may put some agressive rate limiting based on IP prefixes.< / p >
2023-05-26 13:13:50 +00:00
< / div >
2022-02-01 15:08:16 +00:00
2023-05-26 13:13:50 +00:00
<!-- distribution -->
2023-06-01 09:16:20 +00:00
< div id = "distribution" class = "hidden" >
2023-05-26 13:13:50 +00:00
< p class = "mt-4 italic" > There is no known third party packaging for Aerogramme. If you made one, please notify us.< / p >
< / div >
<!-- sources -->
2023-06-01 09:16:20 +00:00
< div id = "sources" class = "hidden" >
2023-05-26 13:13:50 +00:00
< div class = "block mt-4 p-5 bg-black text-gray-100" >
< pre class = "block" > git clone https://git.deuxfleurs.fr/Deuxfleurs/aerogramme.git
cd aerogramme
git checkout 0.0.1
cargo build --release
./target/release/aerogramme< / pre >
< / div >
< div class = "mt-4" >
< a class = "text-aerogramme-blue underline" href = "https://git.deuxfleurs.fr/Deuxfleurs/aerogramme" > Browse the repository ↗< / a >
-
< a class = "text-aerogramme-blue underline" href = "https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/archive/0.0.1-ci.1.zip" > Download a .zip archive< / a >
-
< a class = "text-aerogramme-blue underline" href = "https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/archive/0.0.1-ci.1.tar.gz" > Download a .tar.gz archive< / a >
< / div >
< / div >
2022-02-01 15:08:16 +00:00
< / div >
< / div >
2023-05-26 06:43:55 +00:00
< / div >
< noscript >
< style type = "text/css" >
#releases-container{display:none;}
< / style >
< div id = "js-disabled-msg" class = "p-12" style = "height:70vh" >
Access the Aerogramme releases by clicking on the following link :
< a class = "font-bold text-aerogramme-blue hover:underline" href = "https://git.deuxfleurs.fr/Deuxfleurs/aerogramme.git" > https://git.deuxfleurs.fr/Deuxfleurs/aerogramme.git< / a >
< / div >
< / noscript >
< / div >
< / section >
{% endblock %}
{% block custom_js %}
< script >
2023-06-01 09:16:20 +00:00
const reader = blob => {
const tmp = new FileReader();
return new Promise((resolve, reject) => {
tmp.onerror = () => {
tmp.abort()
reject(new DOMException("Problem parsing blob"))
}
tmp.onload = () => {
resolve(tmp.result)
}
tmp.readAsText(blob)
})
}
const albatros_tags = async () => {
const res = await fetch('https://registry.deuxfleurs.org/v2/aerogramme/tags/list')
const blob = await res.blob()
const txt = await reader(blob)
const tags = JSON.parse(txt)
return tags
}
const prod_semver = /^v?[0-9]+\.[0-9]+\.[0-9]+$/;
const testing_semver = /^v?[0-9]+\.[0-9]+\.[0-9]+-.*$/;
const find_cat = t => {
if (t.match(prod_semver)) return 'production';
if (t.match(testing_semver)) return 'testing';
return 'nightly'
};
const categorize = tags => tags.reduce((acc, t) => {
acc[find_cat(t)].push(t)
return acc
}, {'production': [], 'testing': [], 'nightly': []});
// Manage tabs
const tabs = ["docker", "static", "distribution", "sources" ];
const active_btn = document.getElementById("selected-btn");
const alternative_btn = document.getElementById("alternative-btn");
const menu = document.getElementById("install-choice");
document.querySelectorAll("#install-choice > button").forEach(e => {
e.onclick = () => {
selected_tab = e.id
}
});
const setActiveTab = selected => {
tabs.forEach(t => {
document.getElementById(t).classList.add("hidden")
})
}
(async () => {
const manifest = await albatros_tags()
console.log(categorize(manifest.tags))
})()
2022-02-01 15:08:16 +00:00
< / script >
{% endblock %}