Compare commits
195 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5b1b0ebbbc | ||
|
8170c9a6ef | ||
|
ee6dd8e50c | ||
|
f945b9f0be | ||
|
0c0a61ce0e | ||
|
814aab09e3 | ||
|
5f4667e9c7 | ||
|
0b7c3dbec2 | ||
|
4978158fe3 | ||
|
8490247207 | ||
|
9ce917d935 | ||
|
b5bb810393 | ||
|
ca38ef44d5 | ||
|
d724458e9c | ||
|
1ed8f68e66 | ||
|
9d2fdb1797 | ||
|
c0a671f428 | ||
|
88794e46d2 | ||
|
42415d8730 | ||
|
6ec1c9a2d2 | ||
|
b75dd0317b | ||
|
414e050084 | ||
|
f08e44eeed | ||
|
ca6414bd21 | ||
|
b8e1dbb060 | ||
|
d4a408f1a6 | ||
|
684695247f | ||
|
b0be7a415b | ||
|
e986a637e8 | ||
|
15051a2cf9 | ||
|
2ad353e4b0 | ||
|
4416bb962f | ||
|
e31e90fa7b | ||
|
3510e5cd12 | ||
|
d7165bc76b | ||
|
da9321065b | ||
|
279c912d76 | ||
|
cfcd9a770c | ||
|
2289db1b1f | ||
|
5d9137d54e | ||
|
beef2b1bdb | ||
|
cf54385748 | ||
|
f65c112423 | ||
|
2f2927f042 | ||
|
fe3e9f0cda | ||
|
fda3629148 | ||
|
49cb01e2ed | ||
|
5663b7579d | ||
|
992d24d9fb | ||
|
d91dd4ed2f | ||
|
3b50b75f9c | ||
|
9005f623ae | ||
|
40275436ff | ||
|
b735429ee2 | ||
|
a44cf5723f | ||
|
3b76728b79 | ||
|
d1cf4f1a1e | ||
|
459e47b983 | ||
|
7a140c553a | ||
|
2c3e50e327 | ||
|
ab9d973d7c | ||
|
7de8bc8376 | ||
|
7af21dc164 | ||
|
9c12c3bd31 | ||
|
984ef7ba67 | ||
|
004aa87a56 | ||
|
344593d3a7 | ||
|
cbe46fb8f3 | ||
|
2bbaa32d01 | ||
|
f880b2734f | ||
|
15986f2ff1 | ||
|
792541a1b9 | ||
|
410b32f1bc | ||
|
88c64cb464 | ||
|
100dc5a376 | ||
|
9e901d81e0 | ||
|
c2bc4a23de | ||
|
999d425555 | ||
|
25b5465c18 | ||
|
98d4a7db0d | ||
|
9af4d019a4 | ||
|
2c5daf0d7d | ||
|
20eee0d278 | ||
|
9e6733e0cc | ||
|
6e18eb316e | ||
|
7425043f68 | ||
|
20065df6c6 | ||
|
129db45535 | ||
|
4747aabd2e | ||
|
7d0a5f6092 | ||
|
80be465a99 | ||
|
799806a823 | ||
|
4135d1d108 | ||
|
fb20e55c9d | ||
|
9c8c9aaab3 | ||
|
a8d65e50b8 | ||
|
c9f4dd043d | ||
|
80467364c6 | ||
|
d6b9b7edaf | ||
|
230b90cecf | ||
|
bdaa0c7cc9 | ||
|
8d773126c1 | ||
|
5585484059 | ||
|
5f509b6a13 | ||
|
3b692c8a00 | ||
|
40034b1b89 | ||
|
d31f2dfcb1 | ||
|
e931843579 | ||
|
e5cabe260b | ||
|
ebd676f82b | ||
|
a72e502cc3 | ||
|
2ad3b81fe3 | ||
|
0ea413cc68 | ||
|
be6591da21 | ||
|
bff5e3a3b1 | ||
|
e379eb0805 | ||
|
eadd4761c0 | ||
|
c30a947156 | ||
|
888a0c105d | ||
|
11c449edd8 | ||
|
6b8bf6b858 | ||
|
40aa8f3370 | ||
|
d2d1a14f7a | ||
|
a729c90eab | ||
|
a4c9938506 | ||
|
0346f906af | ||
|
8e66bf1270 | ||
|
30b9d83dde | ||
|
09da48eaa7 | ||
|
b3bdeb2021 | ||
|
7736a7b98f | ||
|
3cd88eafd3 | ||
|
302cc1842e | ||
|
4e92724cc1 | ||
|
0b6d0f8e13 | ||
|
cc34fc23b7 | ||
|
1027b9de85 | ||
|
a9d0e8888e | ||
|
1f6b4aa489 | ||
|
c837e67831 | ||
|
98c31e7fc6 | ||
|
b583dd90b0 | ||
|
ab89261e06 | ||
|
566203be68 | ||
|
0cce54368a | ||
|
e6c096952e | ||
|
b2ea48bf1d | ||
|
78f55d661d | ||
|
f60e7866da | ||
|
ff67137522 | ||
|
964a109f9b | ||
|
4279da6684 | ||
|
ad06db5789 | ||
|
91ac248e81 | ||
|
754d09698b | ||
|
77a876481b | ||
|
6d9ece6f06 | ||
|
3e5f23550e | ||
|
7adb5e177e | ||
|
c03c7e39c2 | ||
|
3e5b93a629 | ||
|
43e522e563 | ||
|
131dc3e0e3 | ||
|
a52bd65ee9 | ||
|
fb91ff2307 | ||
|
9821c8f166 | ||
|
9d034e9f9d | ||
3f1b58e98e | |||
93e5b69aa4 | |||
|
f17753c7a2 | ||
|
fb29d1d8f9 | ||
|
7df0826ab1 | ||
|
778a304c15 | ||
|
cef4c85314 | ||
|
82d0363a39 | ||
|
987cc3585a | ||
|
dea6ff73ef | ||
|
74efa15353 | ||
|
620422b9a5 | ||
|
0a4057e011 | ||
|
33a24de9aa | ||
|
d4344ab9db | ||
bdde6ab74d | |||
|
dc0e0a2fb3 | ||
|
aadb4aebc3 | ||
|
8d7d8a6e65 | ||
|
c610dd549f | ||
|
cc7a8c3273 | ||
|
4110ee17ef | ||
|
02b7cad533 | ||
|
49ff37e302 | ||
|
db31105017 | ||
|
e2f223c093 | ||
|
c59f3839dc | ||
|
1b119d43e6 |
49
.github/CODEOWNERS
vendored
Normal file
49
.github/CODEOWNERS
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
# Reference to configuration - https://github.blog/2017-07-06-introducing-code-owners/
|
||||
# Relevant https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
|
||||
|
||||
# This file is used to set permission per team or user to allow auto-merging
|
||||
|
||||
# Maintainers
|
||||
* @kreyren @RXT0112/maintainers
|
||||
|
||||
# Documentation maintainers
|
||||
/docs/ @RXT0112/documentators
|
||||
|
||||
# Dependencies
|
||||
Cargo.toml @dependabot-preview
|
||||
requirements.txt @dependabot-preview
|
||||
|
||||
# Legal team
|
||||
LICENSE.md @kreyren
|
||||
|
||||
# Rustlang maintainers
|
||||
*.rs @RXT0112/rustlang
|
||||
Cargo.toml @RXT0112/rustlang
|
||||
|
||||
# Python maintainers
|
||||
*.py @RXT0112/python
|
||||
requirements.txt @RXT0112/python
|
||||
|
||||
# Vlang maintainers
|
||||
*.v @RXT0112/vlang
|
||||
|
||||
# Clang maintainers
|
||||
*.c @RXT0112/clang
|
||||
|
||||
# CPP maintainers
|
||||
*.cpp @RXT0112/cpp
|
||||
|
||||
# Shell maintainers
|
||||
*.sh @RXT0112/shell
|
||||
|
||||
# Bash maintainers
|
||||
*.bash @RXT0112/bash
|
||||
|
||||
# Brainfuck maintainers
|
||||
*.br @RXT0112/brainfuck
|
||||
|
||||
# java maintainers
|
||||
*.jar @RXT0112/java
|
||||
|
||||
# csharp maintainers
|
||||
*.cs @RXT0112/csharp
|
5
.github/CONTRIBUTING.md
vendored
Normal file
5
.github/CONTRIBUTING.md
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
# Contributing guideliness
|
||||
|
||||
FIXME: Preamble needed
|
||||
|
||||
FIXME: Do not assign translate variables in fixme messages
|
19
.github/FUNDING.yml
vendored
Normal file
19
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
# Limited on 4 github-sponsor enabled accounts
|
||||
github: kreyren
|
||||
|
||||
# Patreon of rustlang developers and important contributors (http://aturon.github.io/sponsor/)
|
||||
patreon: RiXotStudio leodasvacas matklad QuietMisdreavus xanewok stjepang japaric newrustacean hellorust retep998 tomaka
|
||||
|
||||
# misc
|
||||
open_collective: rixotstudio
|
||||
ko_fi: rixotstudio
|
||||
tidelift: RiXotStudio/RiXotStudio
|
||||
community_bridge: rixotstudio
|
||||
liberapay: RiXotStudio
|
||||
issuehunt: rixotstudio
|
||||
otechie: rixotstudio
|
||||
|
||||
# Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
custom: https://my.fsf.org/join
|
20
.github/README.md
vendored
Normal file
20
.github/README.md
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
**NOTICE:** This project in in "init phase" so everything will be remade into a new orphen branch once methods for quality assurance, documentation, automatization and code is decided to be used as a foundation for new commits
|
||||
|
||||
fixme: Source the header in different markdown file to make GitHub README different from GitLab
|
||||
|
||||
fixme: Change the name based on repository used.
|
||||
|
||||
# RXT0112 (WIP name)
|
||||
|
||||
Package manager for unix and windows written in rustlang
|
||||
|
||||
fixme: Change the URL based on the website used<br>
|
||||
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/RXT0112/RXT0112)
|
||||
|
||||
fixme: Add prety button<br>
|
||||
https://codesandbox.io/s/github/RXT0112/RXT0112
|
||||
|
||||
## ABSTRACT
|
||||
Package manager capable of source and binary import/export with tracking in `world` file and options.
|
||||
|
||||
Developed with GUI in mind
|
46
.github/label-pr.yml
vendored
Normal file
46
.github/label-pr.yml
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
# Programming language specific
|
||||
- regExp: ".*\\.rs+$"
|
||||
labels: ["rustlang"]
|
||||
|
||||
- regExp: ".*\\.py+$"
|
||||
labels: ["python"]
|
||||
|
||||
- regExp: ".*\\.c+$"
|
||||
labels: ["c-lang"]
|
||||
|
||||
- regExp: ".*\\.cpp+$"
|
||||
labels: ["CPP"]
|
||||
|
||||
- regExp: ".*\\.sh+$"
|
||||
labels: ["shell"]
|
||||
|
||||
- regExp: ".*\\.bash+$"
|
||||
labels: ["bash"]
|
||||
|
||||
- regExp: ".*\\.br+$"
|
||||
labels: ["brainfuck"]
|
||||
|
||||
- regExp: ".*\\.jar+$"
|
||||
labels: ["java"]
|
||||
|
||||
- regExp: ".*\\.v+$"
|
||||
labels: ["vlang"]
|
||||
|
||||
- regExp: ".*\\.cs+$"
|
||||
labels: ["csharp"]
|
||||
|
||||
- regExp: ".*tests.*"
|
||||
labels: ["tests"]
|
||||
|
||||
- regExp: "benches"
|
||||
labels: ["benches"]
|
||||
|
||||
- regExp: "LICENSE.md"
|
||||
labels: ["license"]
|
||||
|
||||
- regExp: "^(.*\\Cargo.toml\\requirements.txt)$"
|
||||
labels: ["dependencies"]
|
||||
|
||||
# Repository specific
|
||||
- regExp: ".*docs.*"
|
||||
labels: ["docs"]
|
99
.github/labels.yml
vendored
Normal file
99
.github/labels.yml
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
# This file handles labels on GitHub
|
||||
|
||||
- name: bug
|
||||
color: d73a4a
|
||||
description: "Something isn't working"
|
||||
|
||||
- name: docs
|
||||
color: 0075ca
|
||||
description: "Improvements or additions to documentation"
|
||||
|
||||
- name: duplicate
|
||||
color: cfd8d7
|
||||
description: "This issue or pull request already exists"
|
||||
|
||||
- name: enhancement
|
||||
color: a22eef
|
||||
description: "Proposal for code improvement"
|
||||
|
||||
- name: license
|
||||
color: 1a7546
|
||||
description: "Relevant to licensing"
|
||||
|
||||
- name: dependencies
|
||||
color: ca0ef0
|
||||
description: "Relevant to dependencies"
|
||||
|
||||
- name: tests
|
||||
color: 8d0fd6
|
||||
description: "Relevant to tests"
|
||||
|
||||
- name: benches
|
||||
color: cc1250
|
||||
description: "Relevant to benchmarks"
|
||||
|
||||
# Priority handling
|
||||
- name: P - SHTF
|
||||
color: ae00ff
|
||||
description: "Stop whatever you are doing and focus on this"
|
||||
|
||||
- name: P - Very High
|
||||
color: ff2f00
|
||||
description: "FIXME"
|
||||
|
||||
- name: P - High
|
||||
color: 910f00
|
||||
description: "FIXME"
|
||||
|
||||
- name: P - Med
|
||||
color: ffd000
|
||||
description: "FIXME"
|
||||
|
||||
- name: P - Low
|
||||
color: b3ff00
|
||||
description: "FIXME"
|
||||
|
||||
- name: P - Very Low
|
||||
color: 73ff00
|
||||
description: "FIXME"
|
||||
|
||||
# Programming language specific
|
||||
- name: python
|
||||
color: 00aeff
|
||||
description: "Relevant to python"
|
||||
|
||||
- name: rustlang
|
||||
color: f58142
|
||||
description: "Relevant to rustlang"
|
||||
|
||||
- name: c-lang
|
||||
color: 427bf5
|
||||
description: "Relevant to c-lang"
|
||||
|
||||
- name: brainfuck
|
||||
color: f542c5
|
||||
description: "Relevant to brainfuck"
|
||||
|
||||
- name: shell
|
||||
color: 74e63c
|
||||
description: "Relevant to shell"
|
||||
|
||||
- name: bash
|
||||
color: 9dff00
|
||||
description: "Relevant to bash"
|
||||
|
||||
- name: CCP
|
||||
color: 009dff
|
||||
description: "Relevant to CCP"
|
||||
|
||||
- name: vlang
|
||||
color: 03cafc
|
||||
description: "Relevant to vlang"
|
||||
|
||||
- name: csharp
|
||||
color: 08400a
|
||||
description: "Relevant to csharp"
|
||||
|
||||
- name: java
|
||||
color: ad690a
|
||||
description: "Relevant to java"
|
302
.github/workflows/cona-isa.yml
vendored
Normal file
302
.github/workflows/cona-isa.yml
vendored
Normal file
@ -0,0 +1,302 @@
|
||||
name: ConaIsa
|
||||
|
||||
# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
|
||||
on:
|
||||
pull_request:
|
||||
branches: [master]
|
||||
types: [synchronize, opened, reopened, ready_for_review]
|
||||
|
||||
jobs:
|
||||
# Rustlang
|
||||
build-rustlang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: building..
|
||||
run: make build-rustlang
|
||||
check-rustlang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: checking..
|
||||
run: make check-rustlang
|
||||
bench-rustlang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: running benchmarks..
|
||||
run: make bench-rustlang
|
||||
|
||||
# gcc-c
|
||||
build-gcc-c:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make build-gcc-c
|
||||
run: make build-gcc-c
|
||||
check-gcc-c:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make check-gcc-c
|
||||
run: make check-gcc-c
|
||||
bench-gcc-c:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make bench-gcc-c
|
||||
run: make bench-gcc-c
|
||||
|
||||
# gcc-ccp
|
||||
build-gcc-cpp:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make build-gcc-ccp
|
||||
run: case $(git diff --name-only origin/master) in *.ccp) make build-gcc-ccp; esac
|
||||
check-gcc-cpp:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make check-gcc-ccp
|
||||
run: case $(git diff --name-only origin/master) in *.ccp) make check-gcc-ccp; esac
|
||||
bench-gcc-cpp:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make bench-gcc-ccp
|
||||
run: case $(git diff --name-only origin/master) in *.ccp) make bench-gcc-ccp; esac
|
||||
|
||||
# clang-c
|
||||
build-clang-c:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make build-clang-c
|
||||
run: make build-clang-c
|
||||
check-clang-c:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make check-clang-c
|
||||
run: make check-clang-c
|
||||
bench-clang-c:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make bench-clang-c
|
||||
run: make bench-clang-c
|
||||
|
||||
# clang-ccp
|
||||
build-clang-cpp:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make build-clang-ccp
|
||||
run: make build-clang-ccp
|
||||
check-clang-cpp:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make check-clang-ccp
|
||||
run: make check-clang-ccp
|
||||
bench-clang-cpp:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make bench-clang-ccp
|
||||
run: make bench-clang-ccp
|
||||
|
||||
# vlang
|
||||
build-vlang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Fetching dependencies..
|
||||
run: |
|
||||
# CACHEDIR check
|
||||
[ ! -d "$HOME/.cache/" ] && mkdir "$HOME/.cache"
|
||||
# Fetch vlang
|
||||
[ ! -f "$HOME/.cache/vlang-0.1.24.zip" ] && wget https://github.com/vlang/v/releases/download/0.1.24/v_linux.zip -O "$HOME/.cache/vlang-0.1.24.zip"
|
||||
# Extract
|
||||
[ ! -x "/opt/vlang/v" ] && unzip "$HOME/.cache/vlang-0.1.24.zip" -d /opt/vlang
|
||||
- name: make build-vlang
|
||||
run: make build-vlang
|
||||
check-vlang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Fetching dependencies..
|
||||
run: |
|
||||
# CACHEDIR check
|
||||
[ ! -d "$HOME/.cache/" ] && mkdir "$HOME/.cache"
|
||||
# Fetch vlang
|
||||
[ ! -f "$HOME/.cache/vlang-0.1.24.zip" ] && wget https://github.com/vlang/v/releases/download/0.1.24/v_linux.zip -O "$HOME/.cache/vlang-0.1.24.zip"
|
||||
# Extract
|
||||
[ ! -x "/opt/vlang/v" ] && unzip "$HOME/.cache/vlang-0.1.24.zip" -d /opt/vlang
|
||||
- name: make check-vlang
|
||||
run: make check-vlang
|
||||
bench-vlang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Fetching dependencies..
|
||||
run: |
|
||||
# CACHEDIR check
|
||||
[ ! -d "$HOME/.cache/" ] && mkdir "$HOME/.cache"
|
||||
# Fetch vlang
|
||||
[ ! -f "$HOME/.cache/vlang-0.1.24.zip" ] && wget https://github.com/vlang/v/releases/download/0.1.24/v_linux.zip -O "$HOME/.cache/vlang-0.1.24.zip"
|
||||
# Extract
|
||||
[ ! -x /opt/vlang/v ] && unzip "$HOME/.cache/vlang-0.1.24.zip" -d /opt/vlang
|
||||
- name: make bench-vlang
|
||||
run: make bench-vlang
|
||||
|
||||
# Golang
|
||||
build-golang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make build-golang
|
||||
run: make build-golang
|
||||
check-golang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make check-golang
|
||||
run: make check-golang
|
||||
bench-golang:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: make bench-golang
|
||||
run: make bench-golang
|
||||
|
||||
# Shell
|
||||
check-shell:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: shellcheck
|
||||
uses: azohra/shell-linter@v0.2.0
|
||||
with:
|
||||
path: "src/*.sh"
|
||||
|
||||
# Bash
|
||||
check-bash:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: shellcheck
|
||||
uses: azohra/shell-linter@v0.2.0
|
||||
with:
|
||||
path: "src/*.bash"
|
||||
|
||||
# Python
|
||||
check-python:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
python-version: [2.7, 3.5, 3.6, 3.7, 3.8]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
- name: Lint with flake8
|
||||
run: |
|
||||
pip install flake8
|
||||
# stop the build if there are Python syntax errors or undefined names
|
||||
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
|
||||
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
|
||||
- name: Test with pylint
|
||||
run: |
|
||||
pip install pylint
|
||||
pylint ${{ github.workspace }}/src/bin/main
|
||||
|
||||
# Jekyll
|
||||
jekyll:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, windows-latest, ubuntu-18.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build the site in the jekyll/builder container
|
||||
run: |
|
||||
docker run -v ${{ github.workspace }}:/srv/jekyll -v ${{ github.workspace }}/_site:/srv/jekyll/_site jekyll/builder:latest /bin/bash -c "chmod 777 /srv/jekyll && jekyll build --future"
|
13
.github/workflows/greetings.yml
vendored
Normal file
13
.github/workflows/greetings.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
name: Greetings
|
||||
|
||||
on: [pull_request, issues]
|
||||
|
||||
jobs:
|
||||
greeting:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: 'FIXME: Message for issues'
|
||||
pr-message: 'FIXME: Message for merge requests'
|
23
.github/workflows/label-maker.yml
vendored
Normal file
23
.github/workflows/label-maker.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
name: label-maker
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "*/30 * * * *"
|
||||
|
||||
jobs:
|
||||
labeler:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
-
|
||||
name: Run Labeler
|
||||
if: success()
|
||||
uses: crazy-max/ghaction-github-labeler@v1
|
||||
with:
|
||||
yaml_file: .github/labels.yml
|
||||
skip_delete: false
|
||||
dry_run: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
18
.github/workflows/labeler.yml
vendored
Normal file
18
.github/workflows/labeler.yml
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
# Workflow to associate labels automatically
|
||||
name: labeler
|
||||
|
||||
# Trigger the workflow on pull request events
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
label:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
# We need to checkout the repository to access the configured file (.github/label-pr.yml)
|
||||
- uses: actions/checkout@v2
|
||||
- name: Labeler
|
||||
uses: docker://decathlon/pull-request-labeler-action:2.0.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Here we can override the path for the action configuration. If none is provided, default one is `.github/label-pr.yml`
|
||||
CONFIG_PATH: ${{ secrets.GITHUB_WORKSPACE }}/.github/label-pr.yml
|
19
.github/workflows/stale.yml
vendored
Normal file
19
.github/workflows/stale.yml
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
name: Mark stale issues and pull requests
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/stale@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-issue-message: 'Stale issue message'
|
||||
stale-pr-message: 'Stale pull request message'
|
||||
stale-issue-label: 'no-issue-activity'
|
||||
stale-pr-label: 'no-pr-activity'
|
18
.gitignore
vendored
Normal file
18
.gitignore
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
# FIXME: Move in '.git/info/exclude' once branch is determined ?
|
||||
|
||||
# Autogenerated by Cargo no need to keep in repo
|
||||
Cargo.lock
|
||||
|
||||
# Exclude all backup files
|
||||
*.bak
|
||||
*.bk
|
||||
|
||||
# Exclude build result
|
||||
/target
|
||||
/build
|
||||
|
||||
# Ignore vendor files
|
||||
/vendor
|
||||
|
||||
# Do not include clap benches in the commits
|
||||
/benches/rustlang/claprs*
|
12
.gitpod.yml
Normal file
12
.gitpod.yml
Normal file
@ -0,0 +1,12 @@
|
||||
image:
|
||||
file: gitpod/gitpod.Dockerfile
|
||||
|
||||
vscode:
|
||||
extensions:
|
||||
- kalitaalexey.vscode-rust@0.4.2:iw09QffwKU6Xcxr7C2zalA==
|
||||
- Swellaby.vscode-rust-test-adapter@0.11.0:Xg+YeZZQiVpVUsIkH+uiiw==
|
||||
- bungcip.better-toml@0.3.2:3QfgGxxYtGHfJKQU7H0nEw==
|
||||
- hbenl.vscode-test-explorer@2.15.0:koqDUMWDPJzELp/hdS/lWw==
|
||||
- belfz.search-crates-io@1.2.1:kSLnyrOhXtYPjQpKnMr4eQ==
|
||||
- serayuzgur.crates@0.4.7:HMkoguLcXp9M3ud7ac3eIw==
|
||||
- timonwong.shellcheck@0.9.0:hsU/Rd39aqPYowTqL+DbXg==
|
246
.travis.yml.krey
Normal file
246
.travis.yml.krey
Normal file
@ -0,0 +1,246 @@
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'travis.yml' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/.travis.yml), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
sudo: required
|
||||
|
||||
# Use matrix to run tests on different environments
|
||||
matrix:
|
||||
include:
|
||||
|
||||
## BUILD ##
|
||||
|
||||
# Exherbo Linux
|
||||
# Exherbo with GCC
|
||||
- name: "Exherbo Linux with GCC"
|
||||
os: linux
|
||||
dist: bionic
|
||||
group: exherbo
|
||||
cache:
|
||||
directories:
|
||||
- /var/db/paludis
|
||||
env:
|
||||
DOCKER="exherbo_ci:latest"
|
||||
VARIANT="exherbo"
|
||||
TOOL="build"
|
||||
COMPILER_C="gcc"
|
||||
COMPILER_CXX="g++"
|
||||
|
||||
# Exherbo with Clang
|
||||
- name: "Exherbo Linux with Clang"
|
||||
os: linux
|
||||
dist: bionic
|
||||
group: exherbo
|
||||
cache:
|
||||
directories:
|
||||
- /var/db/paludis
|
||||
env:
|
||||
DOCKER="exherbo_ci:latest"
|
||||
VARIANT="exherbo"
|
||||
TOOL="build"
|
||||
COMPILER_C="clang"
|
||||
COMPILER_CXX="clang++"
|
||||
|
||||
# Ubuntu Linux
|
||||
# Ubuntu 19.10 (Eoan Ermine) with GCC
|
||||
- name: "Ubuntu 19.10 (Eoan Ermine) with GCC"
|
||||
os: linux
|
||||
cache:
|
||||
directories:
|
||||
- /var/cache/apt/
|
||||
dist: bionic
|
||||
group: travis_latest
|
||||
env:
|
||||
DOCKER="ubuntu:eoan"
|
||||
VARIANT="ubuntu-19.10"
|
||||
TOOL="build"
|
||||
COMPILER_C="gcc"
|
||||
COMPILER_CXX="g++"
|
||||
REPOSITORY="https://github.com/RXT0112/Zernit.git"
|
||||
PACKAGES="git make cargo rustc"
|
||||
|
||||
# Ubuntu 19.10 (Eoan Ermine) with Clang
|
||||
- name: "Ubuntu 19.10 (Eoan Ermine) with Clang"
|
||||
os: linux
|
||||
cache:
|
||||
directories:
|
||||
- /var/cache/apt/
|
||||
dist: bionic
|
||||
group: travis_latest
|
||||
env:
|
||||
DOCKER="ubuntu:eoan"
|
||||
VARIANT="ubuntu-19.10"
|
||||
TOOL="build"
|
||||
COMPILER_C="clang"
|
||||
COMPILER_CXX="clang++"
|
||||
REPOSITORY="https://github.com/RXT0112/Zernit.git"
|
||||
PACKAGES="git make cargo rustc"
|
||||
|
||||
# Debian Linux
|
||||
# Debian Testing
|
||||
- name: "Debian Testing with GCC"
|
||||
os: linux
|
||||
dist: bionic
|
||||
group: travis_latest
|
||||
env:
|
||||
DOCKER="debian:testing"
|
||||
VARIANT="debian-testing"
|
||||
TOOL="build"
|
||||
COMPILER_C="gcc"
|
||||
COMPILER_CXX="g++"
|
||||
REPOSITORY="https://github.com/RXT0112/Zernit.git"
|
||||
PACKAGES="rustc cargo git make pkg-config libssl-dev"
|
||||
- name: "Debian Testing with Clang"
|
||||
os: linux
|
||||
dist: bionic
|
||||
group: travis_latest
|
||||
env:
|
||||
DOCKER="debian:testing"
|
||||
VARIANT="debian-testing"
|
||||
TOOL="build"
|
||||
COMPILER_C="clang"
|
||||
COMPILER_CXX="clang++"
|
||||
REPOSITORY="https://github.com/RXT0112/Zernit.git"
|
||||
PACKAGES="rustc cargo git make pkg-config libssl-dev"
|
||||
|
||||
# # Debian Sid
|
||||
# - name: "Debian Sid with GCC"
|
||||
# os: linux
|
||||
# dist: bionic
|
||||
# group: travis_latest
|
||||
# env:
|
||||
# DOCKER="debian:sid"
|
||||
# VARIANT="debian"
|
||||
# TOOL="build"
|
||||
# COMPILER_C="gcc"
|
||||
# COMPILER_CXX="g++"
|
||||
# REPOSITORY="https://github.com/RXT0112/Zernit.git"
|
||||
# PACKAGES="rustc cargo build-essentials make"
|
||||
|
||||
# - name: "Debian Sid with Clang"
|
||||
# os: linux
|
||||
# dist: bionic
|
||||
# group: travis_latest
|
||||
# env:
|
||||
# DOCKER="debian:sid"
|
||||
# VARIANT="debian"
|
||||
# TOOL="build"
|
||||
# COMPILER_C="clang"
|
||||
# COMPILER_CXX="clang++"
|
||||
# REPOSITORY="https://github.com/RXT0112/Zernit.git"
|
||||
# PACKAGES="rustc cargo build-essentials make"
|
||||
|
||||
# # FreeBSD
|
||||
# # FreeBSD 12.0-RELEASE
|
||||
# - name: "FreeBSD 12.0-RELEASE with Clang"
|
||||
# os: linux
|
||||
# dist: bionic
|
||||
# group: travis_latest
|
||||
# env:
|
||||
# QEMU="FreeBSD"
|
||||
# VARIANT="12.0-RELEASE"
|
||||
# TOOL="build"
|
||||
# COMPILER_C="clang"
|
||||
# COMPILER_CXX="clang++"
|
||||
|
||||
# - name: "FreeBSD 12.0-RELEASE with GCC"
|
||||
# os: linux
|
||||
# dist: bionic
|
||||
# group: travis_latest
|
||||
# env:
|
||||
# QEMU="FreeBSD"
|
||||
# VARIANT="12.0-RELEASE"
|
||||
# TOOL="build"
|
||||
# COMPILER_C="gcc"
|
||||
# COMPILER_CXX="g++"
|
||||
|
||||
# FIXME: MacOS needs refactor of C programs to be compatible (https://travis-ci.org/Kreyrock/Kreyrock/jobs/620509927?utm_medium=notification&utm_source=github_status)
|
||||
# MacOS X
|
||||
## MacOS 10.14
|
||||
- name: "MacOS 10.14, xcode11.2 with clang"
|
||||
os: osx
|
||||
cache:
|
||||
- /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
||||
osx_image: xcode11.2
|
||||
compiler: clang
|
||||
group: travis_latest
|
||||
env:
|
||||
TOOL="build"
|
||||
|
||||
- name: "MacOS 10.14, xcode11.2 with gcc"
|
||||
os: osx
|
||||
cache:
|
||||
- /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
||||
osx_image: xcode11.2
|
||||
compiler: gcc
|
||||
group: travis_latest
|
||||
env:
|
||||
TOOL="build"
|
||||
|
||||
## MacOS 10.14.4
|
||||
- name: "MacOS 10.14.4, xcode10.3 with clang"
|
||||
os: osx
|
||||
cache:
|
||||
- /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
||||
osx_image: xcode10.3
|
||||
compiler: clang
|
||||
group: travis_latest
|
||||
env:
|
||||
TOOL="build"
|
||||
|
||||
- name: "MacOS 10.14.4, xcode10.3 with gcc"
|
||||
os: osx
|
||||
cache:
|
||||
- /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
||||
osx_image: xcode10.3
|
||||
compiler: gcc
|
||||
group: travis_latest
|
||||
env:
|
||||
TOOL="build"
|
||||
|
||||
## MacOS 10.13
|
||||
- name: "MacOS 10.13, xcode9.4 with clang"
|
||||
os: osx
|
||||
cache:
|
||||
- /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
||||
osx_image: xcode9.4
|
||||
compiler: clang
|
||||
group: travis_latest
|
||||
env:
|
||||
TOOL="build"
|
||||
|
||||
- name: "MacOS 10.13, xcode9.4 with gcc"
|
||||
os: osx
|
||||
cache:
|
||||
- /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
||||
osx_image: xcode9.4
|
||||
compiler: gcc
|
||||
group: travis_latest
|
||||
env:
|
||||
TOOL="build"
|
||||
|
||||
# Others
|
||||
# Default linux
|
||||
- name: "Linux, default check"
|
||||
os: linux
|
||||
dist: bionic
|
||||
group: travis_latest
|
||||
env:
|
||||
TOOL="check"
|
||||
|
||||
# Windows
|
||||
# - name: "Windows build"
|
||||
# os: windows
|
||||
# env:
|
||||
# TOOL="build"
|
||||
|
||||
before-install:
|
||||
- QA/travis-ci/before-install.sh
|
||||
|
||||
install:
|
||||
- QA/travis-ci/install.sh
|
||||
|
||||
script:
|
||||
- QA/travis-ci/test.sh
|
||||
- QA/travis-ci/build.sh
|
28
Cargo.toml
Normal file
28
Cargo.toml
Normal file
@ -0,0 +1,28 @@
|
||||
# Reference https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[package]
|
||||
name = "zernit"
|
||||
description = "FIXME: description needed"
|
||||
keywords = ["system-manager"]
|
||||
version = "0.0.0"
|
||||
authors = ["Kreyren <KostWarCZE@RiXotStudio.cz>"]
|
||||
edition = "2018"
|
||||
|
||||
# FIXME: Implement automation that bumps the dependencies in a new commit to make it easier to track dependency-caused issues
|
||||
[dependencies]
|
||||
# FIXME: Replace with latest once development is in gold
|
||||
clap = "2.33.0"
|
||||
# Used for repository management as alternative to 'make'
|
||||
cargo-make = "0.27.0"
|
||||
# Used for reading toml files
|
||||
toml = "0.5.6"
|
||||
# Custom logging solution
|
||||
zernit-logger = { path = "src/libs/rustlang/zernit-logger" }
|
||||
|
||||
[dev-dependencies]
|
||||
# Used for benchmarking
|
||||
criterion = "0.3.1"
|
||||
|
||||
# [[bench]]
|
||||
# name = "example_bench"
|
||||
# harness = false
|
72
LICENSE/EN-LICENSE.md
Normal file
72
LICENSE/EN-LICENSE.md
Normal file
@ -0,0 +1,72 @@
|
||||
<!--
|
||||
Expecting
|
||||
- Paid for commercial use (small fee maybe depending on the amount of employees) unless said person is actively contributing to the repository (free-of-charge)
|
||||
- Do not allow keeping the source code closed
|
||||
- Forks are allowed only for contribution unless upstream prevents implementation (excluding changes to the license over which the upstream has full control for obvious reasons, but allow contributions to the license) of a feature for which the fork would be allowed as standalone (This is made to direct the workflow)
|
||||
- Add method to handle projects that rewrite this in a different programming language -> Host in our organization
|
||||
- Anyone can request additional rights for the use of this software (We try to make this as free as possible with the option to finance the development)
|
||||
- Paid for non-contributing users?
|
||||
- Since non-contributing users are basically investment (usually with low return value) of our resources and to encourage contribution in docummentation, etc..?
|
||||
-->
|
||||
|
||||
# RXT ZERNIT LICENSE (RXT0112-LICENSE)
|
||||
Version 0, 20 January 2020
|
||||
|
||||
Copyright (C) 2020 [RiXotStudio](http://rixotstudio.cz)
|
||||
Copyright (C) 2019 [Jacob Hrbek](mailto:kreyren@rixotstudio.cz)
|
||||
|
||||
<!-- FIXME: Rephrase -->
|
||||
None is allowed to distribute copies of this license without explicit permission granted by this license.
|
||||
|
||||
<!-- FIXME: Render preamble in the middle of the documment -->
|
||||
## Preamble
|
||||
This license is made to protect the intellectual property and direct workflow of project codenamed as **RXT0112** also known as **Zernit** where this license is developed based on [GPL-3 license](https://www.gnu.org/licenses/gpl-3.0.en.html) and [Free Software Foundation](https://www.fsf.org) philosophy adapted for commercial use.
|
||||
|
||||
License is community maintained where only the authorized personel identified as **license managers** (or LM for short) are permitted to make changes in the original repository in which this license has been created.
|
||||
These authorized personel can be also clarified in `.github/CODEOWNERS` to appropriate GitHub Team or personal to allow auto-merge in source.
|
||||
|
||||
## TERMINOLOGY
|
||||
|
||||
### Comments
|
||||
Comments are a feature in Markdown (Formatting method used to write this file) that do not render on runtime and are not part of the license.
|
||||
|
||||
Every comment is prefixed with `<!--` and suffixed with `-->` which can be applied through multiple lines.
|
||||
|
||||
### License Managers (or 'LM' for short)
|
||||
**L**icense **M**anagers clarified in path `.github/CODEOWNERS` in this repository are authorised personell with permission to perform merges in LICENSE files.
|
||||
|
||||
### Original Creator (or 'OC' for short)
|
||||
Original Creator of this repository is `Jacob Hrbek <kreyren@rixotstudio.cz>`. OC reserves all rights to whole repository unless license provide in the root of affected directory of file header states otherwise.
|
||||
|
||||
### Repository Managers (or 'RM' for short)
|
||||
Repository Managers are defined as service with the ability to host this repository for maintainer or General Public access.
|
||||
|
||||
### Merge Request
|
||||
Also wrongly named as 'Pull Requst' by many RMs is method to submit new changes in the target repository.
|
||||
|
||||
#### Draft Merge Requests
|
||||
Referencing https://github.blog/2019-02-14-introducing-draft-pull-requests/ for upstream (github) explanation.
|
||||
|
||||
In short this is merge request which is being worked on before it can be submitted for review and considered for merge.
|
||||
|
||||
### Forks
|
||||
Forks are RM's features that allows anyone to make a copy of a repository in their specified profile.
|
||||
|
||||
## Terms and conditions
|
||||
|
||||
### Contributions
|
||||
Everyone is allowed to fork this repository as long as the source code stays public with the intention to provide a contribution to the original repository.
|
||||
|
||||
Creating standalone forks alike creating standalone fork with the intention to provide unique features that are not developed with the intention to contribute the changes in original repository are not allowed and OC reserves an explicit permission to issue DMCA takedown to prevent segmentation of original repository.
|
||||
|
||||
Contributions of new features are expected to be submitted in a form of new merge request set as draft until reviw is requested by switching the contribution from draft to open.
|
||||
|
||||
Contributor has the right to specify his own license assuming following methods used:
|
||||
- License specified as comment in the header (or at the top) of the file which will apply only for specified file
|
||||
|
||||
This clarification has to follow this syntax:
|
||||
```
|
||||
Created by Jon Doe <jon@doe.wow> using LICENSE (hyperlink://on.theLicense.wow) in 2020
|
||||
```
|
||||
|
||||
- `LICENSE` or `LICENSE.md` file created in the root of directory which will be applied for the whole directory.
|
3
LICENSE/README.md
Normal file
3
LICENSE/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
This directory contains license used for the whole repository unless defined otherwise in the license itself.
|
||||
|
||||
Everyone has the right to propose new changes for review with reasoning to why they should be adapted.
|
136
Makefile
Normal file
136
Makefile
Normal file
@ -0,0 +1,136 @@
|
||||
# FIXME: in-code docs needed
|
||||
|
||||
# FIXME: Windows doesn't support makefiles natively -> if you have a better method then please MR it or make an issue
|
||||
|
||||
## Syntax capture ##
|
||||
|
||||
all:
|
||||
@ printf '%s\n' "Unknown option '$1' parsed in target all"
|
||||
@ exit 2
|
||||
|
||||
## BUILD ##
|
||||
# All build targets are expected in 'build/build-LANG' where 'LANG' is the unique identifier of the language used
|
||||
# FIXME: Replace 'exit 1' with helpful messages
|
||||
|
||||
# Fetch files from third parties
|
||||
vendor:
|
||||
@ [ ! -d vendor ] && mkdir vendor
|
||||
@ [ ! -d vendor/rustlang ] && mkdir vendor/rustlang
|
||||
@ [ ! -d vendor/rustlang/clap-rs ] && git clone https://github.com/clap-rs/clap.git vendor/rustlang/clap-rs
|
||||
@ for file in vendor/rustlang/clap-rs/benches/*; do cp "$$file" benches/rustlang/claprs-$${file##vendor/rustlang/clap-rs/benches/??_}; done
|
||||
build: build-rustlang build-clang-c build-gcc-c build-gcc-ccp build-clang-ccp build-brainfuck build-python build-vlang build-golang
|
||||
|
||||
# FIXME: Build in '$repodir/build/build-rustlang' instead of '$repodir/target' for multilang support
|
||||
build-rustlang:
|
||||
@ cargo build --verbose
|
||||
|
||||
# FIXME: Add logic
|
||||
build-clang-c:
|
||||
@ exit 1
|
||||
|
||||
build-gcc-c:
|
||||
@ # Make a build directory
|
||||
@ [ ! -d build ] && { mkdir build || exit 1 ;}
|
||||
@ [ ! -d build/target-gc ] && { mkdir build/build-gc || exit 1 ;}
|
||||
|
||||
@ # Compilation
|
||||
@ ## gc is not available on github -> Using GCC
|
||||
@
|
||||
@ [ ! -f build/build-gc/gc-zernit ] && { gcc src/bin/main.c -o build/build-gc/gc-zernit || exit 1 ;}
|
||||
@ printf '%s\n' "Compilation of target for gc finished"
|
||||
|
||||
# FIXME: Replace 'exit 1' with helpful messages
|
||||
build-gcc-ccp:
|
||||
@ # Make a build directory
|
||||
@ [ ! -d build ] && { mkdir build || exit 1 ;}
|
||||
@ [ ! -d build/target-gcc ] && { mkdir build/build-gcc || exit 1 ;}
|
||||
|
||||
@ # Compilation
|
||||
@ [ ! -f build/build-gcc ] && { gcc src/bin/main.c -o build/build-gcc/gcc-zernit || exit 1 ;}
|
||||
@ printf '%s\n' "Compilation of target for gcc finished"
|
||||
|
||||
build-clang-ccp:
|
||||
@ printf 'FIXME: %s\n' "translate zernit in clang"
|
||||
@ exit 1
|
||||
|
||||
build-brainfuck:
|
||||
@ printf 'FIXME: %s\n' "translate zernit in brainfuck"
|
||||
@ exit 1
|
||||
|
||||
# FIXME: requires python3.6+ and pip3
|
||||
build-python:
|
||||
@ pip3 install -r requirements.txt
|
||||
|
||||
build-vlang:
|
||||
@ [ ! -d build ] && mkdir build
|
||||
@ [ ! -d build/build-vlang ] && mkdir build/build-vlang
|
||||
@ /opt/vlang/v -o build/build-vlang/zernit-vlang src/bin/main.v
|
||||
|
||||
build-golang:
|
||||
@ [ ! -d build ] && mkdir build
|
||||
@ [ ! -d build/build-golang ] && mkdir build/build-golang
|
||||
@ go build -o build/build-golang/zernit-golang src/bin/main.go
|
||||
|
||||
## CHECK/TESTS ##
|
||||
|
||||
check:
|
||||
@ printf 'FIXME: %s\n' "Check all targets if executed"
|
||||
@ exit 1
|
||||
|
||||
check-gcc-c:
|
||||
@ printf 'FIXME: %s\n' "Add tests for gc"
|
||||
@ exit 1
|
||||
|
||||
check-clang-c:
|
||||
@ printf 'FIXME: %s\n' "Add tests for gcc"
|
||||
@ exit 1
|
||||
|
||||
check-gcc-ccp:
|
||||
@ printf 'FIXME: %s\n' "Add tests for clang"
|
||||
@ exit 1
|
||||
|
||||
check-python:
|
||||
@ printf 'FIXME: %s\n' "Add tests for python"
|
||||
@ exit 1
|
||||
|
||||
check-rustlang:
|
||||
@ printf 'FIXME: %s\n' "Add tests for rustlang"
|
||||
@ exit 1
|
||||
|
||||
check-brainfuck:
|
||||
@ printf 'FIXME: %s\n' "Add tests for brainfuck"
|
||||
@ exit 1
|
||||
|
||||
check-shell:
|
||||
@ printf 'FIXME: %s\n' "Add tests for shell"
|
||||
@ exit 1
|
||||
|
||||
check-bash:
|
||||
@ printf 'FIXME: %s\n' "Add tests for bash"
|
||||
@ exit 1
|
||||
|
||||
check-vlang:
|
||||
@ printf 'FIXME: %s\n' "Add tests for vlang"
|
||||
@ exit 1
|
||||
|
||||
## BENCHES ##
|
||||
|
||||
# FIXME: Run all benches if this is executed
|
||||
bench: bench-rustlang
|
||||
|
||||
# FIXME: Run vendor and
|
||||
bench-rustlang: vendor
|
||||
@ cargo bench
|
||||
|
||||
## CLEAN ##
|
||||
|
||||
clean: clean-vendor clean-benches
|
||||
@ [ -d build ] && rm -rf build
|
||||
@ printf '%s\n' "Build directory has been cleaned"
|
||||
|
||||
clean-vendor:
|
||||
@ # FIXME: Output helpful message if directory doesn't exists
|
||||
@ [ -d vendor ] && rm -rf vendor
|
||||
|
||||
clean-benches:
|
||||
@ for file in benches/rustlang/claprs-*; do rm "$$file"; done
|
1
QA/README.md
Normal file
1
QA/README.md
Normal file
@ -0,0 +1 @@
|
||||
Backend for Quality Assurance
|
10
QA/circle-ci/config.yml
Normal file
10
QA/circle-ci/config.yml
Normal file
@ -0,0 +1,10 @@
|
||||
version: 2.1
|
||||
orbs:
|
||||
shellcheck: circleci/shellcheck@1.3.15
|
||||
jobs:
|
||||
build:
|
||||
docker:
|
||||
- image: circleci/node:4.8.2 # the primary container, where your job's commands are run
|
||||
steps:
|
||||
- checkout # check out the code in the project directory
|
||||
- run: make check
|
13
QA/common/qemu_debian.sh
Executable file
13
QA/common/qemu_debian.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
die() { printf 'FATAL: %s\n' "$1" && exit 1 ;}
|
||||
|
||||
[ ! -e debian.qcow ] && { qemu-img create -f qcow2 debian.qcow 20G || die 1 ;}
|
||||
|
||||
#qemu-system-x86_64 -drive format=raw,file=test.img
|
||||
|
||||
#qemu-system-x86_64 -hda debian.qcow -m 640, file=test.img
|
||||
|
||||
#qemu-system-x86_64 -hda ubuntu.qcow -boot d file=test.img -m 640
|
||||
|
||||
qemu-system-x86_64 -hda debian.qcow -boot d -cdrom debian-10.2.0-amd64-netinst.iso -m 640
|
9
QA/common/qemu_ubuntu.sh
Executable file
9
QA/common/qemu_ubuntu.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
die() { printf 'FATAL: %s\n' "$1" && exit 1 ;}
|
||||
|
||||
[ ! -e ubuntu.qcow ] && { qemu-img create -f qcow2 ubuntu.qcow 20G || die 1 ;}
|
||||
|
||||
wget http://releases.ubuntu.com/19.10/ubuntu-19.10-desktop-amd64.iso
|
||||
|
||||
qemu-system-x86_64 -hda ubuntu.qcow -boot d -cdrom ubuntu-19.10-desktop-amd64.iso -m 640
|
29
QA/docker/dockerfiles/Debian/debian_gcc.Dockerfile
Normal file
29
QA/docker/dockerfiles/Debian/debian_gcc.Dockerfile
Normal file
@ -0,0 +1,29 @@
|
||||
FROM debian/debian:testing
|
||||
|
||||
USER root
|
||||
|
||||
# Define libraries
|
||||
RUN sh -c " \
|
||||
fixme() { printf 'FIXME: %s\n' "$1" ;} \
|
||||
warn() { printf 'WARN: %s\n' "$1" ;} \
|
||||
die() { \
|
||||
printf 'FATAL: %s\n' "$1" \
|
||||
exit 1 \
|
||||
}"
|
||||
|
||||
# Install dependencies
|
||||
RUN apt install -y meson cppcheck gcc libfuse3-dev gcc libcap-devgit ninja-build bison libtool autoconf pkg-config libcap-dev indent libattr1-dev fakeroot uthash-dev gzip rsync autopoint shellcheck || die "Unable to install all dependencies"
|
||||
|
||||
# Install shfmt (Hack!)
|
||||
RUN sh -c " \
|
||||
if [ "$(apt-cache search libfuse3-dev | grep -o "shfmt")" != "shfmt" ]; then \
|
||||
if [ ! -e /usr/bin/shfmt ]; then \
|
||||
wget https://github.com/mvdan/sh/releases/download/v3.0.0-beta1/shfmt_v3.0.0-beta1_linux_amd64 -O /usr/bin/shfmt \
|
||||
[ ! -x /usr/bin/shfmt ] && chmod +x /usr/bin/shfmt \
|
||||
elif [ ! -e /usr/bin/shfmt ]; then \
|
||||
fi \
|
||||
elif [ "$(apt-cache search libfuse3-dev | grep -o "shfmt")" = "shfmt" ]; then \
|
||||
apt install -y shfmt || die "Unable to install shfmt" \
|
||||
else \
|
||||
die "Unexpected happend in shfmt hack" \
|
||||
fi"
|
33
QA/docker/dockerfiles/Exherbo/exherbo_clang.Dockerfile
Normal file
33
QA/docker/dockerfiles/Exherbo/exherbo_clang.Dockerfile
Normal file
@ -0,0 +1,33 @@
|
||||
FROM exherbo/exherbo_ci:latest
|
||||
|
||||
USER root
|
||||
|
||||
# Export paludis-config
|
||||
RUN rm -r /etc/paludis && git clone https://github.com/Kreyrock/paludis-config.git /etc/paludis
|
||||
|
||||
# Sync repos
|
||||
RUN cave sync
|
||||
|
||||
# Add required repositories
|
||||
RUN [ ! -e /etc/paludis/repositories/alip.conf ] && cave resolve -x1 repository/alip
|
||||
RUN [ ! -e /etc/paludis/repositories/compnerd.conf ] && cave resolve -x1 repository/compnerd
|
||||
RUN [ ! -e /etc/paludis/repositories/virtualization.conf ] && cave resolve -x1 repository/virtualization
|
||||
RUN [ ! -e /etc/paludis/repositories/danyspin97.conf ] && cave resolve -x1 repository/danyspin97
|
||||
RUN [ ! -e /etc/paludis/repositories/python.conf ] && cave resolve -x1 repository/python
|
||||
RUN [ ! -e /etc/paludis/repositories/perl.conf ] && cave resolve -x1 repository/perl
|
||||
RUN [ ! -e /etc/paludis/repositories/hasufell.conf ] && cave resolve -x1 repository/hasufell
|
||||
|
||||
# Install build dependencies
|
||||
RUN cave resolve sys-devel/meson sys-devel/clang sys-fs/fuse dev-scm/git sys-devel/ninja sys-devel/bison sys-devel/libtool sys-devel/autoconf dev-util/pkg-config sys-apps/fakeroot app-arch/gzip net-misc/rsync sys-devel/autoconf -x
|
||||
|
||||
# Install test dependencies
|
||||
RUN cave resolve dev-util/cppcheck dev-util/indent dev-util/shellcheck -x
|
||||
|
||||
# Purge unwanted packages
|
||||
RUN cave purge -x
|
||||
|
||||
# Remove build instructions
|
||||
RUN sh -c " \
|
||||
if [ -d /var/db/paludis ]; then \
|
||||
rm -r /var/db/paludis || die "Unable to remove"
|
||||
"
|
30
QA/docker/dockerfiles/Exherbo/exherbo_gcc.Dockerfile
Normal file
30
QA/docker/dockerfiles/Exherbo/exherbo_gcc.Dockerfile
Normal file
@ -0,0 +1,30 @@
|
||||
FROM exherbo/exherbo_ci:latest
|
||||
|
||||
USER root
|
||||
|
||||
# Export paludis-config
|
||||
RUN rm -r /etc/paludis && git clone https://github.com/Kreyrock/paludis-config.git /etc/paludis
|
||||
|
||||
# Sync repos
|
||||
RUN cave sync
|
||||
|
||||
# Add required repositories
|
||||
RUN [ ! -e /etc/paludis/repositories/alip.conf ] && cave resolve -x1 repository/alip
|
||||
RUN [ ! -e /etc/paludis/repositories/compnerd.conf ] && cave resolve -x1 repository/compnerd
|
||||
RUN [ ! -e /etc/paludis/repositories/virtualization.conf ] && cave resolve -x1 repository/virtualization
|
||||
RUN [ ! -e /etc/paludis/repositories/danyspin97.conf ] && cave resolve -x1 repository/danyspin97
|
||||
RUN [ ! -e /etc/paludis/repositories/python.conf ] && cave resolve -x1 repository/python
|
||||
RUN [ ! -e /etc/paludis/repositories/perl.conf ] && cave resolve -x1 repository/perl
|
||||
RUN [ ! -e /etc/paludis/repositories/hasufell.conf ] && cave resolve -x1 repository/hasufell
|
||||
|
||||
# Install build dependencies
|
||||
RUN cave resolve sys-devel/meson sys-devel/gcc sys-fs/fuse dev-scm/git sys-devel/ninja sys-devel/bison sys-devel/libtool sys-devel/autoconf dev-util/pkg-config sys-apps/fakeroot app-arch/gzip net-misc/rsync sys-devel/autoconf -x
|
||||
|
||||
# Install test dependencies
|
||||
RUN cave resolve dev-util/cppcheck dev-util/indent dev-util/shellcheck -x
|
||||
|
||||
# Purge unwanted packages
|
||||
RUN cave purge -x
|
||||
|
||||
# Remove build instructions
|
||||
RUN rm -r /var/db/paludis
|
51
QA/github/NAME-ME.yml
Normal file
51
QA/github/NAME-ME.yml
Normal file
@ -0,0 +1,51 @@
|
||||
name: NAME-ME
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
# TODO
|
||||
## Change profile photo of this CI
|
||||
## Greet end-user submiting merge request that is not in blacklist (blacklist used for trusted devs) with message ensuring QA
|
||||
## Greet end-user submiting merge request with checklist
|
||||
## Adapt lable handling
|
||||
|
||||
jobs:
|
||||
build-ubuntu:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
# FIXME: Get libfuse3-dev for tests on etcfs.c
|
||||
run: sudo apt-get install meson cppcheck clang gcc git ninja-build bison libtool autoconf pkg-config libcap-dev indent fakeroot uthash-dev gzip rsync autopoint shellcheck -y && sudo wget https://github.com/mvdan/sh/releases/download/v3.0.0-beta1/shfmt_v3.0.0-beta1_linux_amd64 -O /usr/bin/shfmt && sudo chmod +x /usr/bin/shfmt
|
||||
- uses: actions/checkout@v1
|
||||
#- name: Compile
|
||||
# Disable signature for tests
|
||||
# run: CFLAGS="-O3 --pipe" make SKIPSIGN=true --jobs
|
||||
- name: Lint
|
||||
run: make check
|
||||
build-macos:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: brew install shellcheck
|
||||
- uses: actions/checkout@v1
|
||||
- name: Lint
|
||||
run: make check
|
||||
build-freebsd:
|
||||
runs-on: freebsd-latest
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: pkg install hs-ShellCheck
|
||||
- uses: actions/checkout@v1
|
||||
- name: Lint
|
||||
run: make check
|
||||
build-redox:
|
||||
runs-on: redox-latest
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: printf '%s\n' "This is a gesture to redox developers to encourage development, once we are able to install required packages we will use them"
|
||||
- name: Lint
|
||||
run: make check
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Lint
|
||||
run: make check
|
13
QA/tests/HELL/README.md
Normal file
13
QA/tests/HELL/README.md
Normal file
@ -0,0 +1,13 @@
|
||||
# HELL - Quality assurance for (WIP name)
|
||||
|
||||
Welcome to HELL!
|
||||
|
||||
![](https://media.giphy.com/media/2U1WOzgmZVw2Y/giphy.gif)
|
||||
|
||||
HELL is used for the quality assurance for (WIP name)
|
||||
|
||||
FIXME: Documentation here
|
||||
|
||||
TODO
|
||||
- ban echo
|
||||
- ban cd
|
191
QA/tests/HELL/backend/configure_backend.sh
Executable file
191
QA/tests/HELL/backend/configure_backend.sh
Executable file
@ -0,0 +1,191 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'before-install' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/before-install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
: '
|
||||
This file is used to configure backend depending on expected workflow. This is for example installing dependencies for tests.
|
||||
|
||||
This file expects following variables:
|
||||
- KERNEL = Used kernel (linux)
|
||||
- VARIANT = Name of used distribution (debian)
|
||||
- IDENTIFIER = name of codename or version ("bullseye" or "11")
|
||||
|
||||
In case DOCKER images are used:
|
||||
- DOCKER = Name of used docker container (exherbo/exherbo_ci:latest)
|
||||
|
||||
In case QEMU is used:
|
||||
- QEMU = Name of (FIXME, not implemented)
|
||||
|
||||
TODO
|
||||
- Implement building of DOCKER images
|
||||
- Implement QEMU
|
||||
'
|
||||
|
||||
# Configure backend
|
||||
if [ "$KERNEL" = linux ]; then
|
||||
# Install all dependencies
|
||||
info "Installing dependencies for on $KERNEL for $VARIANT-$IDENTIFIER"
|
||||
|
||||
case "$VARIANT-$IDENTIFIER" in
|
||||
ubuntu-bionic|ubuntu-18.04)
|
||||
# Install all dependencies
|
||||
apt install -y \
|
||||
meson cppcheck libcap-dev clang libfuse3-dev gcc git ninja-build bison libtool autoconf pkg-config libcap-dev indent fakeroot libattr1-dev uthash-dev gzip rsync autopoint uthash-dev shellcheck \
|
||||
|| die "Unable to install all dependencies for $VARIANT-$IDENTIFIER"
|
||||
|
||||
# libfuse3-dev hack
|
||||
if [ "$(apt-cache search libfuse3-dev | grep -o "libfuse3-dev")" != "libfuse3-dev" ]; then
|
||||
warn "libfuse3-dev is not available on $VARIANT-$IDENTIFIER, trying to resolve manually"
|
||||
|
||||
apt install -y ninja-build || die 1 "Unable to install dependencies for hack"
|
||||
|
||||
mkdir "$HOME/build/fuse3"
|
||||
|
||||
fixme "Export latest fuse3 instead of hard-coded?"
|
||||
if [ ! -e "$HOME/build/fuse3/fuse-3.6.2.tar.xz" ]; then
|
||||
wget https://github.com/libfuse/libfuse/releases/download/fuse-3.6.2/fuse-3.6.2.tar.xz -O "$HOME/build/fuse3/fuse-3.6.2.tar.xz" || die 1 "Unable to fetch fuse"
|
||||
elif [ -e "$HOME/build/fuse3/fuse-3.6.2.tar.xz" ]; then
|
||||
info "File '$HOME/build/fuse3/fuse-3.6.2.tar.xz' is already fetched"
|
||||
else
|
||||
die 255 "Fetching fuse3 tarball"
|
||||
fi
|
||||
|
||||
fixme "Sanitize tarball export (do not export if the tarball already exists)"
|
||||
tar xpf "$HOME/build/fuse3/fuse-3.6.2.tar.xz" --directory="$HOME/build/fuse3/"
|
||||
|
||||
# FIXME: Sanitize - Do not create a build dir if it already exists
|
||||
mkdir "$HOME/build/fuse3/fuse-3.6.2/build"
|
||||
|
||||
fixme "Do not use 'cd'"
|
||||
cd "$HOME/build/fuse3/fuse-3.6.2/build" || die 1 "Unable to change directory in '$HOME/build/fuse3/fuse-3.6.2/build'"
|
||||
|
||||
meson .. --prefix /usr || die 1 "Meson failed, (FIXME: more info required)"
|
||||
|
||||
ninja || die 1 "ninja failed, (FIXME: more info required)"
|
||||
|
||||
ninja install || die 1 "ninja install failed, (FIXME: more info required)"
|
||||
elif [ "$(apt-cache search libfuse3-dev | grep -o "libfuse3-dev")" = "libfuse3-dev" ]; then
|
||||
info "libfuse3-dev is available on this $VARIANT-$IDENTIFIER, no need to install it manually"
|
||||
apt install -y libfuse3-dev || die 1 "Unable to install libfuse3-dev"
|
||||
else
|
||||
die 255 "libfuse3-dev in $VARIANT"
|
||||
fi
|
||||
|
||||
# Hack fof shfmt
|
||||
if [ "$(apt-cache search shfmt | grep -o "shfmt")" != "shfmt" ]; then
|
||||
warn "This system doesn't have shfmt in build instructions, trying to resolve.."
|
||||
|
||||
if [ -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is already installed, skipping hack"
|
||||
|
||||
elif [ ! -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is not installed, installing.."
|
||||
|
||||
# Sanitized in if statement's expression
|
||||
wget https://github.com/mvdan/sh/releases/download/v3.0.0-beta1/shfmt_v3.0.0-beta1_linux_amd64 -O /usr/bin/shfmt
|
||||
|
||||
# Make sure that it is executable
|
||||
[ ! -x /usr/bin/shfmt ] && chmod +x /usr/bin/shfmt
|
||||
else
|
||||
die 255 "shfmt hack in $VARIANT"
|
||||
fi
|
||||
elif [ "$(apt-cache search shfmt | grep -o "shfmt")" = "shfmt" ]; then
|
||||
info "shfmt is available on this $VARIANT, no need to install it manually"
|
||||
apt install -y shfmt
|
||||
else
|
||||
die 255 "shfmt hack in ubuntu"
|
||||
fi
|
||||
;;
|
||||
ubuntu-*)
|
||||
apt install -y \
|
||||
meson cppcheck libcap-dev clang libfuse3-dev gcc git ninja-build bison libtool autoconf pkg-config libcap-dev indent fakeroot libattr1-dev uthash-dev gzip rsync autopoint uthash-dev shellcheck \
|
||||
|| die 1 "Unable to install all dependencies for $VARIANT-$IDENTIFIER"
|
||||
|
||||
# Hack fof shfmt
|
||||
if [ "$(apt-cache search shfmt | grep -o "shfmt")" != "shfmt" ]; then
|
||||
warn "This system doesn't have shfmt in build instructions, trying to resolve.."
|
||||
|
||||
if [ -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is already installed, skipping hack"
|
||||
elif [ ! -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is not installed, installing.."
|
||||
wget https://github.com/mvdan/sh/releases/download/v3.0.0-beta1/shfmt_v3.0.0-beta1_linux_amd64 -O /usr/bin/shfmt
|
||||
[ ! -x /usr/bin/shfmt ] && chmod +x /usr/bin/shfmt
|
||||
else
|
||||
die 255 "shfmt hack in $VARIANT"
|
||||
fi
|
||||
elif [ "$(apt-cache search shfmt | grep -o "shfmt")" = "shfmt" ]; then
|
||||
info "shfmt is available on this $VARIANT, no need to install it manually"
|
||||
apt install -y shfmt
|
||||
else
|
||||
die 255 "shfmt hack in $VARIANT"
|
||||
fi
|
||||
;;
|
||||
*) die 2 "Unsupported VARIANT-IDENTIFIER - $VARIANT-$IDENTIFIER"
|
||||
esac
|
||||
|
||||
# Docker backend
|
||||
if [ -n "$DOCKER" ]; then
|
||||
info "Preparing the environment to run docker image '$DOCKER'"
|
||||
|
||||
# Install docker dependencies
|
||||
info "Installing dependencies for docker"
|
||||
|
||||
case "$VARIANT-$IDENTIFIER" in
|
||||
ubuntu*|debian*)
|
||||
apt install -y docker-io || die 1 "Unable to install docker dependencies on $VARIANT-$IDENTIFIER"
|
||||
;;
|
||||
*) die 2 "Unsupported VARIABLE-IDENTIFIER has been parsed in resoluting docker dependencies"
|
||||
esac
|
||||
|
||||
case "$VARIANT-$IDENTIFIER" in
|
||||
debian*|ubuntu*|exherbo*)
|
||||
docker run -d --name "$DOCKER" || die 1 "Unable to run docker image '$DOCKER' on $VARIANT-$IDENTIFIER"
|
||||
;;
|
||||
*) die "Unsupported VARIANT-IDENTIFIER has been parsed - $VARIANT-$IDENTIRIER"
|
||||
esac
|
||||
|
||||
# Get docker image
|
||||
case "$DOCKER_IMAGE" in
|
||||
*/*:*|*/*) # Fetch docker image from dockerhub
|
||||
die fixme "Implement using docker images from dockerhub"
|
||||
build_*) # Build docker images
|
||||
info "Preparing to build docker image ${DOCKERIMAGE#build_}"
|
||||
case ${DOCKER_IMAGE#build_} in
|
||||
exherbo)
|
||||
die fixme "Implement building exherbo docker image"
|
||||
;;
|
||||
*) die 255 "DOCKER_IMAGE - build"
|
||||
esac
|
||||
;;
|
||||
*) die 255 "DOCKER_IMAGE"
|
||||
esac
|
||||
|
||||
# In case Docker is not used
|
||||
elif [ -z "$DOCKER" ]; then
|
||||
info "Docker is not used, skipping configuration"
|
||||
else
|
||||
die 255 "Docker backend in $KERNEL"
|
||||
fi
|
||||
|
||||
if [ -n "$QEMU" ]; then
|
||||
die fixme "Implement tests on QEMU using linux"
|
||||
elif [ -z "$QEMU" ]; then
|
||||
info "QEMU is not used, skipping configuration"
|
||||
else
|
||||
die 255 "QEMU in $KERNEL"
|
||||
fi
|
||||
|
||||
elif [ "$KERNEL" = darwin ]; then
|
||||
# Homebrew takes lots of time on runtime due to the cleanup used, this is a hotfix (https://travis-ci.community/t/macosx-brew-update-takes-too-much-time/6295)
|
||||
HOMEBREW_NO_INSTALL_CLEANUP=1 brew update || die "Unable to update brew repositories"
|
||||
|
||||
info "Installing dependencies on $KERNEL"
|
||||
brew install shellcheck cppcheck shfmt || die "Unable to install dependencies on $KERNEL"
|
||||
elif [ "$KERNEL" = freebsd ]; then
|
||||
fixme "$KERNEL is not implemented"
|
||||
else
|
||||
die "Unsupported KERNEL used - $KERNEL"
|
||||
fi
|
18
QA/tests/HELL/backend/get-variables.sh
Executable file
18
QA/tests/HELL/backend/get-variables.sh
Executable file
@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'before-install' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/before-install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
# Get KERNEL Variable
|
||||
if [ -z "$KERNEL"]; then
|
||||
case "$(uname -s)" in
|
||||
Linux) KERNEL=linux ;;
|
||||
Darwin KERNEL=darwin ;;
|
||||
*) die 255 "Unsupported output of 'uname -s' has been parsed - $(uname -s)"
|
||||
esac
|
||||
elif [ -n "$KERNEL"]; then
|
||||
warn "Variable 'KERNEL' is overwritten on '$KERNEL'"
|
||||
else
|
||||
die 255 "Getting KERNEL variable"
|
||||
fi
|
72
QA/tests/HELL/backend/output.sh
Executable file
72
QA/tests/HELL/backend/output.sh
Executable file
@ -0,0 +1,72 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'before-install' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/before-install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
: '
|
||||
This file is used for sourcing
|
||||
|
||||
Used for output of various messages
|
||||
- die Outputs a message and exits
|
||||
- warn Output a warning
|
||||
- info Output info
|
||||
'
|
||||
|
||||
# Outputs a message and exits
|
||||
# SYNOPSIS: die [num] (message)
|
||||
die() {
|
||||
err_code="$1"
|
||||
message="$2"
|
||||
|
||||
case "$err_code" in
|
||||
0) true ;;
|
||||
1)
|
||||
if [ -z "$message" ]; then
|
||||
case $LANG in
|
||||
en*) printf 'FATAL: %s\n' "Script returned true" ;;
|
||||
# Do not transtale, default message
|
||||
*) printf 'FATAL: %s\n' "Script returned true"
|
||||
esac
|
||||
elif [ -n "$message" ]; then
|
||||
case $LANG in
|
||||
en*) printf 'FATAL: %s\n' "$mesage" ;;
|
||||
# Do not transtale, default message
|
||||
*) printf 'FATAL: %s\n' "$message"
|
||||
esac
|
||||
else
|
||||
printf 'FATAL: %s\n' "Unexpected happend in die 1"
|
||||
exit 255
|
||||
fi
|
||||
exit $err_code
|
||||
;;
|
||||
3)
|
||||
# FIXME: Implement translate
|
||||
# FIXME: Implement message handling
|
||||
printf 'FATAL: %s\n' "This script is expected to be invoked as root"
|
||||
;;
|
||||
255)
|
||||
# FIXME: Implement translate
|
||||
# FIXME: Implement output for blank $message
|
||||
|
||||
printf 'FATAL: %s\n' "Unexpected happend in $message"
|
||||
exit $err_code
|
||||
;;
|
||||
fixme)
|
||||
# FIXME: Translate
|
||||
# FIXME: Handle scenarios where message is not parsed
|
||||
printf 'FIXME: $s\n' "$message"
|
||||
;;
|
||||
*) printf 'FATAL: %s\n' "Unexpected argument '$err_code' has been parsed in 'die()'" ; exit 255
|
||||
esac
|
||||
|
||||
unset err_code message
|
||||
}
|
||||
|
||||
warn() { printf 'WARN: %s\n' "$1" ;}
|
||||
info() { printf 'INFO: %s\n' "$1" ;}
|
||||
fixme() {
|
||||
case $1 in
|
||||
*) printf 'FIXME: %s\n' "$2"
|
||||
esac
|
||||
}
|
17
QA/tests/HELL/hell.sh
Executable file
17
QA/tests/HELL/hell.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'before-install' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/before-install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
# NOT_PRODUCTION_READY
|
||||
printf 'WARN: %s\n' "This file is not production ready, USE ON YOUR OWN RISK!"
|
||||
|
||||
# Get output messages
|
||||
. QA/tests/HELL/backend/output.sh
|
||||
|
||||
# Get Variables
|
||||
. QA/tests/HELL/backend/get-variables.sh
|
||||
|
||||
# Configure backend
|
||||
. QA/tests/HELL/backend/configure_backend.sh
|
5
QA/tests/README.md
Normal file
5
QA/tests/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Quality Assurance of (WIP name)
|
||||
|
||||
- Check for `shift` and force `shift 1`
|
||||
- https://github.com/koalaman/shellcheck/wiki/Directive#source -> Check shellcheck version
|
||||
- Force using '$var' instead of '${var}' where possible
|
274
QA/tests/backend.sh
Normal file
274
QA/tests/backend.sh
Normal file
@ -0,0 +1,274 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1117
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'before-install' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/before-install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
: '
|
||||
This file expects following variables:
|
||||
- KERNEL = Used kernel
|
||||
- VARIANT = Name of used distribution (lower-case)
|
||||
- IDENTIFIER = name of codename or version
|
||||
|
||||
In case DOCKER images are used:
|
||||
- DOCKER = Name of used docker container
|
||||
|
||||
In case QEMU is used:
|
||||
- QEMU = Name of (FIXME, not implemented)
|
||||
|
||||
TODO
|
||||
- Implement building of DOCKER images
|
||||
'
|
||||
|
||||
# SYNOPSIS: die [num] (message)
|
||||
die() {
|
||||
err_code="$1"
|
||||
message="$2"
|
||||
|
||||
case "$err_code" in
|
||||
0) true ;;
|
||||
1)
|
||||
if [ -z "$message" ]; then
|
||||
case $LANG in
|
||||
en*) printf 'FATAL: %s\n' "Script returned true" ;;
|
||||
# Do not transtale, default message
|
||||
*) printf 'FATAL: %s\n' "Script returned true"
|
||||
esac
|
||||
elif [ -n "$message" ]; then
|
||||
case $LANG in
|
||||
en*) printf 'FATAL: %s\n' "$mesage" ;;
|
||||
# Do not transtale, default message
|
||||
*) printf 'FATAL: %s\n' "$message"
|
||||
esac
|
||||
else
|
||||
printf 'FATAL: %s\n' "Unexpected happend in die 1"
|
||||
exit 255
|
||||
fi
|
||||
exit $err_code
|
||||
;;
|
||||
3)
|
||||
# FIXME: Implement translate
|
||||
# FIXME: Implement message handling
|
||||
printf 'FATAL: %s\n' "This script is expected to be invoked as root"
|
||||
;;
|
||||
255)
|
||||
# FIXME: Implement translate
|
||||
# FIXME: Implement output for blank $message
|
||||
|
||||
printf 'FATAL: %s\n' "Unexpected happend in $message"
|
||||
exit $err_code
|
||||
;;
|
||||
fixme)
|
||||
# FIXME: Translate
|
||||
# FIXME: Handle scenarios where message is not parsed
|
||||
printf 'FIXME: $s\n' "$message"
|
||||
;;
|
||||
*) printf 'FATAL: %s\n' "Unexpected argument '$err_code' has been parsed in 'die()'" ; exit 255
|
||||
esac
|
||||
|
||||
unset err_code message
|
||||
}
|
||||
|
||||
warn() { printf 'WARN: %s\n' "$1" ;}
|
||||
info() { printf 'INFO: %s\n' "$1" ;}
|
||||
fixme() {
|
||||
case $1 in
|
||||
*) printf 'FIXME: %s\n' "$2"
|
||||
esac
|
||||
}
|
||||
|
||||
# Configure backend
|
||||
if [ "$KERNEL" = linux ]; then
|
||||
# Install all dependencies
|
||||
info "Installing dependencies for on $KERNEL for $VARIANT-$IDENTIFIER"
|
||||
|
||||
case "$VARIANT-$IDENTIFIER" in
|
||||
ubuntu-bionic|ubuntu-18.04)
|
||||
# Install all dependencies
|
||||
apt install -y \
|
||||
meson cppcheck libcap-dev clang libfuse3-dev gcc git ninja-build bison libtool autoconf pkg-config libcap-dev indent fakeroot libattr1-dev uthash-dev gzip rsync autopoint uthash-dev shellcheck \
|
||||
|| die "Unable to install all dependencies for $VARIANT-$IDENTIFIER"
|
||||
|
||||
# libfuse3-dev hack
|
||||
if [ "$(apt-cache search libfuse3-dev | grep -o "libfuse3-dev")" != "libfuse3-dev" ]; then
|
||||
warn "libfuse3-dev is not available on $VARIANT-$IDENTIFIER, trying to resolve manually"
|
||||
|
||||
apt install -y ninja-build || die 1 "Unable to install dependencies for hack"
|
||||
|
||||
mkdir "$HOME/build/fuse3"
|
||||
|
||||
fixme "Export latest fuse3 instead of hard-coded?"
|
||||
if [ ! -e "$HOME/build/fuse3/fuse-3.6.2.tar.xz" ]; then
|
||||
wget https://github.com/libfuse/libfuse/releases/download/fuse-3.6.2/fuse-3.6.2.tar.xz -O "$HOME/build/fuse3/fuse-3.6.2.tar.xz" || die 1 "Unable to fetch fuse"
|
||||
elif [ -e "$HOME/build/fuse3/fuse-3.6.2.tar.xz" ]; then
|
||||
info "File '$HOME/build/fuse3/fuse-3.6.2.tar.xz' is already fetched"
|
||||
else
|
||||
die 255 "Fetching fuse3 tarball"
|
||||
fi
|
||||
|
||||
fixme "Sanitize tarball export (do not export if the tarball already exists)"
|
||||
tar xpf "$HOME/build/fuse3/fuse-3.6.2.tar.xz" --directory="$HOME/build/fuse3/"
|
||||
|
||||
# FIXME: Sanitize - Do not create a build dir if it already exists
|
||||
mkdir "$HOME/build/fuse3/fuse-3.6.2/build"
|
||||
|
||||
fixme "Do not use 'cd'"
|
||||
cd "$HOME/build/fuse3/fuse-3.6.2/build" || die 1 "Unable to change directory in '$HOME/build/fuse3/fuse-3.6.2/build'"
|
||||
|
||||
meson .. --prefix /usr || die 1 "Meson failed, (FIXME: more info required)"
|
||||
|
||||
ninja || die 1 "ninja failed, (FIXME: more info required)"
|
||||
|
||||
ninja install || die 1 "ninja install failed, (FIXME: more info required)"
|
||||
elif [ "$(apt-cache search libfuse3-dev | grep -o "libfuse3-dev")" = "libfuse3-dev" ]; then
|
||||
info "libfuse3-dev is available on this $VARIANT-$IDENTIFIER, no need to install it manually"
|
||||
apt install -y libfuse3-dev || die 1 "Unable to install libfuse3-dev"
|
||||
else
|
||||
die 255 "libfuse3-dev in $VARIANT"
|
||||
fi
|
||||
|
||||
# Hack fof shfmt
|
||||
if [ "$(apt-cache search shfmt | grep -o "shfmt")" != "shfmt" ]; then
|
||||
warn "This system doesn't have shfmt in build instructions, trying to resolve.."
|
||||
|
||||
if [ -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is already installed, skipping hack"
|
||||
|
||||
elif [ ! -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is not installed, installing.."
|
||||
|
||||
# Sanitized in if statement's expression
|
||||
wget https://github.com/mvdan/sh/releases/download/v3.0.0-beta1/shfmt_v3.0.0-beta1_linux_amd64 -O /usr/bin/shfmt
|
||||
|
||||
# Make sure that it is executable
|
||||
[ ! -x /usr/bin/shfmt ] && chmod +x /usr/bin/shfmt
|
||||
else
|
||||
die 255 "shfmt hack in $VARIANT"
|
||||
fi
|
||||
elif [ "$(apt-cache search shfmt | grep -o "shfmt")" = "shfmt" ]; then
|
||||
info "shfmt is available on this $VARIANT, no need to install it manually"
|
||||
apt install -y shfmt
|
||||
else
|
||||
die 255 "shfmt hack in ubuntu"
|
||||
fi
|
||||
;;
|
||||
ubuntu-*)
|
||||
apt install -y \
|
||||
meson cppcheck libcap-dev clang libfuse3-dev gcc git ninja-build bison libtool autoconf pkg-config libcap-dev indent fakeroot libattr1-dev uthash-dev gzip rsync autopoint uthash-dev shellcheck \
|
||||
|| die 1 "Unable to install all dependencies for $VARIANT-$IDENTIFIER"
|
||||
|
||||
# Hack fof shfmt
|
||||
if [ "$(apt-cache search shfmt | grep -o "shfmt")" != "shfmt" ]; then
|
||||
warn "This system doesn't have shfmt in build instructions, trying to resolve.."
|
||||
|
||||
if [ -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is already installed, skipping hack"
|
||||
elif [ ! -e /usr/bin/shfmt ]; then
|
||||
info "shfmt is not installed, installing.."
|
||||
wget https://github.com/mvdan/sh/releases/download/v3.0.0-beta1/shfmt_v3.0.0-beta1_linux_amd64 -O /usr/bin/shfmt
|
||||
[ ! -x /usr/bin/shfmt ] && chmod +x /usr/bin/shfmt
|
||||
else
|
||||
die 255 "shfmt hack in $VARIANT"
|
||||
fi
|
||||
elif [ "$(apt-cache search shfmt | grep -o "shfmt")" = "shfmt" ]; then
|
||||
info "shfmt is available on this $VARIANT, no need to install it manually"
|
||||
apt install -y shfmt
|
||||
else
|
||||
die 255 "shfmt hack in $VARIANT"
|
||||
fi
|
||||
;;
|
||||
*) die 2 "Unsupported VARIANT-IDENTIFIER - $VARIANT-$IDENTIFIER"
|
||||
esac
|
||||
|
||||
# Docker backend
|
||||
if [ -n "$DOCKER" ]; then
|
||||
info "Preparing the environment to run docker image '$DOCKER'"
|
||||
|
||||
# Install docker dependencies
|
||||
info "Installing dependencies for docker"
|
||||
|
||||
case "$VARIANT-$IDENTIFIER" in
|
||||
ubuntu*|debian*)
|
||||
apt install -y docker-io || die 1 "Unable to install docker dependencies on $VARIANT-$IDENTIFIER"
|
||||
;;
|
||||
*) die 2 "Unsupported VARIABLE-IDENTIFIER has been parsed in resoluting docker dependencies"
|
||||
esac
|
||||
|
||||
case "$VARIANT-$IDENTIFIER" in
|
||||
debian*|ubuntu*|exherbo*)
|
||||
docker run -d --name "$DOCKER" || die 1 "Unable to run docker image '$DOCKER' on $VARIANT-$IDENTIFIER"
|
||||
;;
|
||||
*) die "Unsupported VARIANT-IDENTIFIER has been parsed - $VARIANT-$IDENTIRIER"
|
||||
esac
|
||||
|
||||
# Get docker image
|
||||
case "$DOCKER_IMAGE" in
|
||||
*/*:*|*/*) # Fetch docker image from dockerhub
|
||||
die fixme "Implement using docker images from dockerhub"
|
||||
build_*) # Build docker images
|
||||
info "Preparing to build docker image ${DOCKERIMAGE#build_}"
|
||||
case ${DOCKER_IMAGE#build_} in
|
||||
exherbo)
|
||||
die fixme "Implement building exherbo docker image"
|
||||
;;
|
||||
*) die 255 "DOCKER_IMAGE - build"
|
||||
esac
|
||||
;;
|
||||
*) die 255 "DOCKER_IMAGE"
|
||||
esac
|
||||
|
||||
# In case Docker is not used
|
||||
elif [ -z "$DOCKER" ]; then
|
||||
info "Docker is not used, skipping configuration"
|
||||
else
|
||||
die 255 "Docker backend in $KERNEL"
|
||||
fi
|
||||
|
||||
if [ -n "$QEMU" ]; then
|
||||
die fixme "Implement tests on QEMU using linux"
|
||||
elif [ -z "$QEMU" ]; then
|
||||
info "QEMU is not used, skipping configuration"
|
||||
else
|
||||
die 255 "QEMU in $KERNEL"
|
||||
fi
|
||||
|
||||
elif [ "$KERNEL" = darwin ]; then
|
||||
# Homebrew takes lots of time on runtime due to the cleanup used, this is a hotfix (https://travis-ci.community/t/macosx-brew-update-takes-too-much-time/6295)
|
||||
HOMEBREW_NO_INSTALL_CLEANUP=1 brew update || die "Unable to update brew repositories"
|
||||
|
||||
info "Installing dependencies on $KERNEL"
|
||||
brew install shellcheck cppcheck shfmt || die "Unable to install dependencies on $KERNEL"
|
||||
elif [ "$KERNEL" = freebsd ]; then
|
||||
fixme "$KERNEL is not implemented"
|
||||
else
|
||||
die "Unsupported KERNEL used - $KERNEL"
|
||||
fi
|
||||
|
||||
# Run tests
|
||||
if [ "$TEST" = core ]; then
|
||||
info "Performing core tests.."
|
||||
make check || die 1 "Tests failed"
|
||||
elif [ "$TEST" = extensive ]; then
|
||||
info "Performing extensive tests"
|
||||
fixme "Implement extensive tests"
|
||||
make fullcheck || die 1 "Tests failed"
|
||||
elif [ "$TEST" = skip ]; then
|
||||
info "Variable 'TEST' stores value 'skip', skipping tests"
|
||||
elif [ "$TEST" = '' ]; then
|
||||
warn "Variable 'TEST' is not set, skipping tests"
|
||||
else
|
||||
die 255 "Performing tests"
|
||||
fi
|
||||
|
||||
# Build
|
||||
if [ "$BUILD" = all ]; then
|
||||
info "Performing build on kernel '$KERNEL' using $VARIANT-$IDENTIFIER"
|
||||
make SKIPSIGN=true || die 1 "Build failed"
|
||||
elif [ "$BUILD" = skip ]; then
|
||||
info "Variable 'BUILD' stores valie 'skip', skipping build"
|
||||
elif [ "$BUILD" = '' ]; then
|
||||
warn "Variable 'BUILD' is not set, skipping build"
|
||||
else
|
||||
die 255 "Building on $KERNEL"
|
||||
fi
|
116
QA/tests/check.sh
Executable file
116
QA/tests/check.sh
Executable file
@ -0,0 +1,116 @@
|
||||
#!/bin/sh
|
||||
|
||||
die() {
|
||||
err_code="$1"
|
||||
message="$2"
|
||||
|
||||
case $err_code in
|
||||
1)
|
||||
printf 'FATAL: %s\n' "$message"
|
||||
exit "$err_code"
|
||||
;;
|
||||
lintfail)
|
||||
printf 'FATAL: %s\n' "Linting file '$file', failed.."
|
||||
exit 1
|
||||
;;
|
||||
255)
|
||||
printf 'FATAL: %s\n' "$message"
|
||||
exit "$err_code"
|
||||
;;
|
||||
*)
|
||||
printf 'FATAL: %s\n' "Unrecognized error code argument has been parsed in die function in QA/tests/shell/check.sh"
|
||||
exit 255
|
||||
esac
|
||||
|
||||
unset err_code message
|
||||
}
|
||||
|
||||
fixme() {
|
||||
argument="$1"
|
||||
|
||||
case $argument in
|
||||
LintNotImplemented) printf 'FIXME: %s\n' "Unable to check file '$file', $identifier linting is not implemented" ;;
|
||||
*) printf 'FIXME: %s\n' "$*"
|
||||
esac
|
||||
|
||||
unset argument
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2044 # HOTFIX!
|
||||
for file in $(find . -not \( \
|
||||
-path './.git' -prune -o \
|
||||
-path './vendor' -prune -o \
|
||||
-name 'LICENSE' -prune -o \
|
||||
-name '.gitignore' -prune -o \
|
||||
-name 'os-release' -prune -o \
|
||||
-name '.keepinfodir' -prune -o \
|
||||
-name 'include-bedrock' -prune -o \
|
||||
-name 'lock' -prune \
|
||||
\) -type f); do
|
||||
|
||||
# Identify file
|
||||
# FIXME: In theory we can use 'file' for this instead
|
||||
case "$file" in
|
||||
*.c) identifier="C" ;;
|
||||
*.sh) identifier="shell" ;;
|
||||
*.bash) identifier="bash" ;;
|
||||
*.yml) identifier="yaml" ;;
|
||||
*.md) identifier="markdown" ;;
|
||||
*.png) identifier="png" ;;
|
||||
*.zsh) identifier="zsh" ;;
|
||||
*.conf) identifier="config" ;;
|
||||
*.fish) identifier="fish" ;;
|
||||
*.gpg) identifier="gpg" ;;
|
||||
*.service) identifier="service" ;;
|
||||
*.donotcheck|*.disabled) identifier="DoNotCheck" ;;
|
||||
*.json) identifier="json" ;;
|
||||
*.Dockerfile) identifier="dockerfile" ;;
|
||||
*.xml) identifier="xml" ;;
|
||||
*.fetchnext) identifier="fetchnext" ;;
|
||||
*/Makefile) identifier="makefile" ;;
|
||||
*.bak) identifier="backup" ;;
|
||||
*)
|
||||
case "$(head -n1 "$file")" in
|
||||
'#!/'*'/bash'|'#!/'*' bash') identifier="bash" ;;
|
||||
'#!/'*'/sh'|'#!/'*' sh') identifier="shell" ;;
|
||||
'#compdef'*) identifier="zsh" ;;
|
||||
*) die 255 "Unexpected file '$file' has been parsed in tests, unable to resolve for tests"
|
||||
esac
|
||||
esac
|
||||
|
||||
# Output message about checked file
|
||||
printf "checking $identifier file %s\\n" "${file#./}"
|
||||
|
||||
# Test file based on identifier
|
||||
case "$identifier" in
|
||||
C)
|
||||
cppcheck --error-exitcode=1 "$file" || die lintfail
|
||||
;;
|
||||
markdown|yaml|config|makefile|service|gpg|json|xml|dockerfile)
|
||||
fixme LintNotImplemented
|
||||
;;
|
||||
backup|png)
|
||||
true # Do not check these
|
||||
;;
|
||||
DoNotCheck)
|
||||
printf 'INFO: %s\n' "File $file is set to be ignored by tests"
|
||||
;;
|
||||
fetchnext)
|
||||
printf 'INFO: %s\n' "fetchnext files are stub"
|
||||
;;
|
||||
bash)
|
||||
shellcheck -x -s bash "$file" || die lintfail
|
||||
;;
|
||||
shell)
|
||||
shellcheck -x -s bash "$file" || die lintfail
|
||||
;;
|
||||
zsh)
|
||||
# zsh are apparently tested agains bash in shellcheck (FIXME: Sanity-check)
|
||||
shellcheck -x -s bash "$file" || die lintfail
|
||||
;;
|
||||
fish)
|
||||
fixme LintNotImplemented
|
||||
;;
|
||||
*) die 255 "Unknown identifier for file '$file' has been parsed, unable to resolve.."
|
||||
esac
|
||||
done
|
25
QA/tests/shell/shellizator.bash
Executable file
25
QA/tests/shell/shellizator.bash
Executable file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
# This file has to be bash since we are using non-POSIX regex
|
||||
# Make it POSIX-compatible - using awk? perl?
|
||||
|
||||
# shellcheck source=src/slash-bedrock/lib/shell/common-code.sh
|
||||
. /bedrock/lib/shell/common-code.sh
|
||||
|
||||
file="$1"
|
||||
syntax_err="$2"
|
||||
|
||||
# Die if more then one argument has been parsed
|
||||
[ -n "$syntax_err" ] && die 1 "Wrong argumnet '$syntax_err' has been parsed in 'shellizator.sh'"
|
||||
|
||||
# Shift arguments
|
||||
while [ $# -gt 1 ]; do shift 1; done
|
||||
|
||||
# Convert ${var} -> $var where possible (https://regex101.com/r/J7vfQC/5)
|
||||
sed -i -E 's:([\/\=\ \"\>\-]|^)(\$)\{([a-zA-Z0-9_]+)\}([\,\ \"\n\,\/\!\:\\\-\.]):\1\2\3\4:' "$file" || die 1 "Unable to convert '\${var}' to '\$var' in $file"
|
||||
|
||||
# Convert `if [ "${TRAVIS_OS_NAME}" == "linux" -a "${DOCKER}" == "" -a "${QEMU}" == "" ] ; then` in `if [ "${TRAVIS_OS_NAME}" == "linux" ] && [ "${DOCKER}" == "" ] && [ "${QEMU}" == "" ] ; then`
|
||||
|
||||
fixme "Implement shellizator if fixing"
|
||||
|
||||
# Remove unnecesary spaces in if statements after the `]` and before 'then' (https://regex101.com/r/XhNCZd/1)
|
||||
sed -i -E 's:(if[^;]+)\s(\;\sthen):\1\2:gm' "$file" || die 1 "Unable to remove unnecesary spaces in if statements"
|
214
QA/travis-ci/before-install.sh
Executable file
214
QA/travis-ci/before-install.sh
Executable file
@ -0,0 +1,214 @@
|
||||
#!/bin/bash
|
||||
# shellcheck disable=SC1117
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'before-install' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/before-install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
# shellcheck source=QA/travis-ci/travis-common.sh
|
||||
. "QA/travis-ci/travis-common.sh"
|
||||
|
||||
# shellcheck source=QA/travis-ci/get-container.sh
|
||||
. "QA/travis-ci/get-container.sh"
|
||||
|
||||
fixme "Travis - before-install.sh disables SC1117 as hotfix"
|
||||
|
||||
# Linux as-is
|
||||
if [ "$TRAVIS_OS_NAME" = linux ] && [ -z "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
|
||||
# Nothing else to do
|
||||
true
|
||||
|
||||
# Linux via Docker
|
||||
elif [ "$TRAVIS_OS_NAME" = linux ] && [ -n "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
# The build machine therefore needs a sufficient amount of RAM!
|
||||
[ -e "$CONTAINER" ] && sudo docker rm -f "$CONTAINER"
|
||||
sudo docker run -d \
|
||||
--name "$CONTAINER" \
|
||||
--tmpfs /var/cache/pbuilder:rw,exec,dev,size=4g \
|
||||
--tmpfs /var/lib/mock:rw,exec,dev,size=4g \
|
||||
--cap-add=SYS_ADMIN --cap-add=NET_ADMIN \
|
||||
--security-opt apparmor:unconfined \
|
||||
-v "$(pwd):/travis" -w /travis \
|
||||
"$DOCKER" tail -f /dev/null
|
||||
sudo docker ps
|
||||
|
||||
# Exherbo via Docker
|
||||
elif [ "$TRAVIS_OS_NAME" = 'Exherbo Linux' ] && [ -n "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
# The build machine therefore needs a sufficient amount of RAM!
|
||||
[ -e "$CONTAINER" ] && sudo docker rm -f "$CONTAINER"
|
||||
|
||||
# Run docker
|
||||
sudo docker run -d \
|
||||
--name "$CONTAINER" \
|
||||
--cap-add=SYS_ADMIN --cap-add=NET_ADMIN \
|
||||
--security-opt apparmor:unconfined \
|
||||
-v "$(pwd):/travis" -w /travis \
|
||||
|
||||
# FreeBSD via QEMU
|
||||
# QA: Convert on POSIX-compatible
|
||||
elif [ "$TRAVIS_OS_NAME" = linux ] && [ "$QEMU" = FreeBSD ]; then
|
||||
|
||||
if [ -n "$VARIANT" ]; then
|
||||
sudo mkdir -p /vservers/qemu-freebsd
|
||||
sudo chown "$USER:$USER" /vservers/qemu-freebsd
|
||||
mkdir -p /vservers/qemu-freebsd/mnt
|
||||
cd /vservers/qemu-freebsd || die "Unable to change directory in '/vservers/qemu-freebsd'"
|
||||
|
||||
# Download image
|
||||
imageName="FreeBSD-$VARIANT-amd64.raw"
|
||||
if [ -e "$imageName.xz" ] && [ ! -e "$imageName" ]; then
|
||||
printf '%s\n' "Extracting existing $imageName.xz ..."
|
||||
xz -T0 -dk "$imageName.xz"
|
||||
elif [ ! -e "$imageName.xz" ] || [ ! -e "$imageName" ]; then
|
||||
imageURL="https://download.freebsd.org/ftp/releases/VM-IMAGES/$VARIANT/amd64/Latest/$imageName.xz"
|
||||
info "Downloading FreeBSD VM image from $imageURL ..."
|
||||
curl "$imageURL" | tee "$imageName.xz.tmp" | xz -T0 -d - ">$imageName"
|
||||
mv "$imageName.xz.tmp" "$imageName.xz" || die "Unable to rename $imageName.xz.tmp in $imageName.xz"
|
||||
fi
|
||||
|
||||
# Modify FreeBSD image
|
||||
pushd /vservers/qemu-freebsd/
|
||||
|
||||
# Grow image
|
||||
truncate -s 128G "$imageName"
|
||||
echo -e "w\nY\nY\n" | LANG=C gdisk "$imageName"
|
||||
parted -s "$imageName" resizepart 3 100%
|
||||
parted -s "$imageName" print
|
||||
|
||||
# Mount
|
||||
ls -l "$imageName"
|
||||
mountPoint="$(pwd)/mnt"
|
||||
|
||||
sudo umount "$mountPoint" 2>/dev/null || true
|
||||
LOOPDEVS="$(sudo losetup -j "$imageName" | awk '{ print $1 }' | sed -e "s/:$//g")"
|
||||
for loopdev in $LOOPDEVS ;do
|
||||
sudo losetup -d "$loopdev" || true
|
||||
done
|
||||
|
||||
sudo losetup -P -f "$imageName"
|
||||
sudo losetup -j "$imageName"
|
||||
LOOPDEV="$(sudo losetup -j "$imageName" | awk '{ print $1 }' | sed -e "s/:$//g")"
|
||||
|
||||
echo "sudo fuse-ufs2/fuse-ufs/fuse-ufs ${LOOPDEV}p3 $mountPoint -o rw"
|
||||
sudo fuse-ufs2/fuse-ufs/fuse-ufs "${LOOPDEV}p3" "$mountPoint" -o rw
|
||||
|
||||
# Modify
|
||||
# Set up networking:
|
||||
sudo cp "$mountPoint/etc/rc.conf" .
|
||||
sudo bash -c "(
|
||||
echo \"sshd_enable=\\\"YES\\\"\"
|
||||
echo \"ifconfig_vtnet0=\\\"DHCP\\\"\"
|
||||
echo \"ifconfig_vtnet1=\\\"inet 192.168.100.100 netmask 255.255.255.0\\\"\"
|
||||
echo \"nfs_client_enable=\\\"YES\\\"\"
|
||||
echo \"rpc_lockd_enable=\\\"YES\\\"\"
|
||||
echo \"rpc_statd_enable=\\\"YES\\\"\"
|
||||
) >>$mountPoint/etc/rc.conf"
|
||||
|
||||
# Make sure that FreeBSD uses the latest packages:
|
||||
sudo sed -e 's#"pkg+http://pkg.FreeBSD.org/${ABI}/quarterly"#"pkg+http://pkg.FreeBSD.org/${ABI}/latest"#g' -i "$mountPoint/etc/pkg/FreeBSD.conf"
|
||||
|
||||
# Make sure that the /usr/ports directory is there.
|
||||
sudo mkdir -p "$mountPoint/usr/ports"
|
||||
|
||||
# Add SSH public key authentication:
|
||||
sudo mkdir -p "$mountPoint/root/.ssh"
|
||||
sudo chmod 700 "$mountPoint/root/.ssh"
|
||||
if [ ! -e "$HOME/.ssh/id_rsa" ]; then
|
||||
ssh-keygen -t rsa -b 4096 -P "" -f "$HOME/.ssh/id_rsa"
|
||||
fi
|
||||
sudo cp "$HOME/.ssh/id_rsa.pub" "$mountPoint/root/.ssh/authorized_keys"
|
||||
sudo chmod 600 "$mountPoint/root/.ssh/authorized_keys"
|
||||
|
||||
sudo bash -c "echo \"PermitRootLogin prohibit-password\" >>$mountPoint/etc/ssh/sshd_config"
|
||||
# sudo tail -n 6 ${mountPoint}/etc/ssh/sshd_config
|
||||
|
||||
# Set up NFS:
|
||||
sudo mkdir -p "$mountPoint/travis"
|
||||
sudo sed -e "/^.*\/travis.*$/d" -i~ "$mountPoint/etc/fstab"
|
||||
sudo bash -c "( echo \"192.168.100.1:/travis /travis nfs rw,soft,async,noatime,nfsv3,rsize=65536,wsize=65536 0 0\" ; echo \"tmpfs /usr/ports tmpfs rw 0 0\" ) >>$mountPoint/etc/fstab"
|
||||
sudo cat "$mountPoint/etc/fstab"
|
||||
|
||||
# Unmount
|
||||
sudo umount "$mountPoint"
|
||||
sudo losetup -d "$LOOPDEV"
|
||||
|
||||
popd
|
||||
|
||||
# Host-only networking
|
||||
sudo ip link add br0 type bridge || true
|
||||
sudo ip addr flush dev br0
|
||||
sudo ip addr add 192.168.100.1/24 brd 192.168.100.255 dev br0
|
||||
sudo ip tuntap add mode tap
|
||||
sudo ip link set tap0 master br0
|
||||
sudo ip link set dev br0 up
|
||||
sudo ip link set dev tap0 up
|
||||
sudo iptables -A INPUT -i tap0 -s 192.168.100.0/24 -j ACCEPT
|
||||
sudo iptables -A OUTPUT -o tap0 -d 192.168.100.0/24 -j ACCEPT
|
||||
sudo iptables -A INPUT -i br0 -s 192.168.100.0/24 -j ACCEPT
|
||||
sudo iptables -A OUTPUT -o br0 -d 192.168.100.0/24 -j ACCEPT
|
||||
sudo iptables -A FORWARD -s 192.168.100.0/24 -d 192.168.100.0/24
|
||||
# sudo dnsmasq --interface=br0 --bind-interfaces \
|
||||
# --dhcp-range=192.168.100.2,192.168.100.254 || true
|
||||
|
||||
|
||||
# NFS
|
||||
sudo mkdir -p /travis
|
||||
sudo mount --bind "$(pwd)" /travis
|
||||
sudo bash -c "echo \"/travis 192.168.100.0/24(rw,no_root_squash)\" >/etc/exports"
|
||||
env LANG=C.UTF-8 ci/retry -t "$RETRY_MAXTRIALS" -p "$RETRY_PAUSE" -- sudo apt-get install -y qemu-kvm nfs-kernel-server
|
||||
sudo exportfs -v
|
||||
sudo service nfs-kernel-server restart
|
||||
|
||||
# ====== Start VM =====================================================
|
||||
sudo killall -q qemu-system-x86_64 || true
|
||||
ssh-keygen -R "[localhost]:8829" -f ~/.ssh/known_hosts
|
||||
# Non-KVM execution: qemu-system-x86_64 \
|
||||
sudo qemu-system-x86_64 -machine type=pc,accel=kvm -nographic \
|
||||
-m 6144 -cpu host -smp "$(nproc)" \
|
||||
-drive "if=virtio,media=disk,file=/vservers/qemu-freebsd/$imageName,format=raw" \
|
||||
-netdev user,id=mynet0,hostfwd=tcp:127.0.0.1:8829-:22 -device virtio-net-pci,netdev=mynet0 \
|
||||
-netdev tap,id=network0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=network0,mac=00:00:00:00:00:00 \
|
||||
&
|
||||
|
||||
ready=0
|
||||
trials=20 ; sleep=15
|
||||
i=0 ; while [ "$i" -lt "$trials" ]; do
|
||||
# QA: Convert on POSIX compatible
|
||||
# shellcheck disable=2219
|
||||
let i=$i+1
|
||||
echo "$i/$trials: Waiting for VM to boot ..."
|
||||
sleep "$sleep"
|
||||
if ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost hostname; then
|
||||
ready=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ $ready -eq 0 ]; then
|
||||
echo >&2 "VM did not boot properly!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Download fuse-ufs2
|
||||
# if [ ! -d fuse-ufs2/ ]; then
|
||||
# info "Downloading fuse-ufs2 ..."
|
||||
# git clone https://github.com/dreibh/fuse-ufs2 -b dreibh/ubuntu-disco-fix
|
||||
# # git clone https://github.com/mkatiyar/fuse-ufs2
|
||||
# fi
|
||||
|
||||
# Get repository
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
git clone https://github.com/Kreyrock/Kreyrock.git
|
||||
|
||||
unset imageName imageURL
|
||||
fi
|
||||
|
||||
# MacOS X
|
||||
elif [ "$TRAVIS_OS_NAME" = osx ]; then
|
||||
|
||||
# Nothing to be done here.
|
||||
true
|
||||
|
||||
else
|
||||
die "Invalid setting of TRAVIS_OS_NAME=$TRAVIS_OS_NAME, DOCKER=$DOCKER, QEMU=$QEMU!"
|
||||
fi
|
36
QA/travis-ci/build.sh
Executable file
36
QA/travis-ci/build.sh
Executable file
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
|
||||
# shellcheck source=QA/travis-ci/travis-common.sh
|
||||
. "QA/travis-ci/travis-common.sh"
|
||||
|
||||
# shellcheck source=QA/travis-ci/get-container.sh
|
||||
. "QA/travis-ci/get-container.sh"
|
||||
|
||||
# Skip build if not set up
|
||||
case "$TOOL" in
|
||||
*build*) true ;;
|
||||
*) die 0 "Skipping build as instructed"
|
||||
esac
|
||||
|
||||
# Linux as-is
|
||||
if [ "$TRAVIS_OS_NAME" = linux ] && [ -z "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
make --directory="/travis/Zernit" build-rustlang
|
||||
|
||||
# Linux via Docker
|
||||
elif [ "$TRAVIS_OS_NAME" = linux ] && [ -n "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
sudo docker exec "$CONTAINER" make --directory="/travis/Zernit" build-rustlang
|
||||
|
||||
# MacOS X
|
||||
elif [ "$TRAVIS_OS_NAME" = osx ]; then
|
||||
make build-rustlang
|
||||
|
||||
elif [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$QEMU" = "FreeBSD" ]; then
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
make check
|
||||
|
||||
else
|
||||
die "Invalid setting of TRAVIS_OS_NAME=$TRAVIS_OS_NAME, DOCKER=$DOCKER, QEMU=$QEMU!"
|
||||
|
||||
fi
|
36
QA/travis-ci/get-container.sh
Normal file
36
QA/travis-ci/get-container.sh
Normal file
@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'before-install' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/before-install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
# shellcheck source=QA/travis-ci/travis-common.sh
|
||||
. "QA/travis-ci/travis-common.sh"
|
||||
|
||||
if [ -n "$DOCKER" ]; then
|
||||
|
||||
# Check configuration
|
||||
if [ -z "$VARIANT" ] ; then
|
||||
die "Variable VARIANT is not set"
|
||||
fi
|
||||
if [ -z "$TOOL" ] ; then
|
||||
die "Variable TOOL is not set"
|
||||
fi
|
||||
|
||||
# Get name of package
|
||||
fixme "Output package name based on repository name"
|
||||
PACKAGE="Zernit"
|
||||
|
||||
# Set container name
|
||||
CONTAINER=$(printf '%s\n' "$PACKAGE-$DOCKER-$TOOL" | sed -e "s/:/_/g")
|
||||
if [ -n "$COMPILER_C" ]; then
|
||||
CONTAINER="$CONTAINER-$COMPILER_C"
|
||||
fi
|
||||
export CONTAINER
|
||||
|
||||
elif [ -z "$DOCKER" ]; then
|
||||
info "Docker is not used"
|
||||
|
||||
else
|
||||
die 256 "Unexpected happend while processing DOCKER variable"
|
||||
fi
|
132
QA/travis-ci/install.sh
Executable file
132
QA/travis-ci/install.sh
Executable file
@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC1117
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'install.sh' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/install), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
# shellcheck source=QA/travis-ci/travis-common.sh
|
||||
. "QA/travis-ci/travis-common.sh"
|
||||
|
||||
# shellcheck source=QA/travis-ci/get-container.sh
|
||||
. "QA/travis-ci/get-container.sh"
|
||||
|
||||
fixme "Travis - install.sh is disabling SC1117 as hotfix"
|
||||
|
||||
# Linux as-is
|
||||
if [ "$TRAVIS_OS_NAME" = linux ] && [ -z "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
|
||||
# Update repositories based on available package manager
|
||||
if command -v apt >/dev/null; then
|
||||
sudo apt update || die 1 "Unable to update repositories on VARIANT '$VARIANT'"
|
||||
elif command -v cave >/dev/null; then
|
||||
cave sync || die 1 "Unable to update repositories on paludis"
|
||||
else
|
||||
die 256 "Unsupported package manager has been used"
|
||||
fi
|
||||
|
||||
# Install dependencies based on variant used
|
||||
case "$VARIANT" in
|
||||
ubuntu-*|debian-*)
|
||||
# Install dependencies
|
||||
if [ -n "$PACKAGES" ]; then
|
||||
sudo apt install -y "$PACKAGES" || die 1 "Unable to install following packages: '$PACKAGES'"
|
||||
elif [ -z "$PACKAGES" ]; then
|
||||
info "Dependencies are not specified in PACKAGES variable"
|
||||
else
|
||||
die 256 "Unexpected happend while processing PACKAGES variable"
|
||||
fi
|
||||
;;
|
||||
*) die 2 "Unsupported variant '$VARIANT' has been parsed"
|
||||
esac
|
||||
|
||||
# Do not clean repositories since docker images are not saved
|
||||
|
||||
# Linux via Docker
|
||||
elif [ "$TRAVIS_OS_NAME" = linux ] && [ -n "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
|
||||
fixme "Fix duplicates of repository update"
|
||||
|
||||
case "$VARIANT" in
|
||||
ubuntu-*|debian-*)
|
||||
# Update repositories
|
||||
docker exec "$CONTAINER" apt update || die 1 "Unable to update repositories on '$VARIANT' using DOCKER '$DOCKER'"
|
||||
|
||||
# Install dependencies
|
||||
if [ -n "$PACKAGES" ]; then
|
||||
# NOTICE: DO not double quote PACKAGES
|
||||
docker exec "$CONTAINER" apt install -y $PACKAGES || die 1 "Unable to install following packages on '$CONTAINER': '$PACKAGES'"
|
||||
elif [ -z "$PACKAGES" ]; then
|
||||
true
|
||||
else
|
||||
die 256 "Resolving packages for '$CONTAINER'"
|
||||
fi
|
||||
;;
|
||||
*) die 256 "Unsupported variant '$VARIANT' has been parsed in DOCKER '$DOCKER'"
|
||||
esac
|
||||
|
||||
info "Fetching repository for $VARIANT"
|
||||
|
||||
sudo docker exec "$CONTAINER" git clone "$REPOSITORY" || die 1 "Unable to fetch '$REPOSITORY'"
|
||||
|
||||
# MacOS X
|
||||
elif [ "$TRAVIS_OS_NAME" = osx ]; then
|
||||
# Homebrew takes lots of time on runtime due to the cleanup used, this is a hotfix (https://travis-ci.community/t/macosx-brew-update-takes-too-much-time/6295)
|
||||
HOMEBREW_NO_INSTALL_CLEANUP=1 brew update || die "Unable to update brew"
|
||||
|
||||
info "Installing dependencies"
|
||||
|
||||
if [ -n "$PACKAGES" ]; then
|
||||
brew install $PACKAGES || die "Unable to install dependencies on $TRAVIS_OS_NAME"
|
||||
elif [ -z "$PACKAGES" ]; then
|
||||
true
|
||||
else
|
||||
die 256 "Unexpected happend while installing packages on '$TRAVIS_OS_NAME'"
|
||||
fi
|
||||
|
||||
# FreeBSD via QEMU
|
||||
elif [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$QEMU" = "FreeBSD" ]; then
|
||||
if [ -n "$VARIANT" ]; then
|
||||
# Install packages
|
||||
# Ensure the file system is true (fuse-ufs2 in write mode is unreliable!)
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
"mount -fr / ; fsck -y /dev/gpt/rootfs ; mount -fw / ; df -h"
|
||||
|
||||
# Basic dependencies:
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
env ASSUME_ALWAYS_YES=yes pkg update
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
env ASSUME_ALWAYS_YES=yes pkg install -y bash autoconf meson cppcheck fusefs-libs3 gcc git ninja bison libtool autoconf pkg-config indent fakeroot gzip rsync autopoint shellcheck
|
||||
|
||||
# Bash shell:
|
||||
# Use bash, and make sure it is available under /bin/bash.
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
chsh -s /usr/local/bin/bash
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
ln -s /usr/local/bin/bash /bin/bash || true
|
||||
|
||||
# Ports collection:
|
||||
# This is the slow method via portsnap:
|
||||
# --- ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
# --- "portsnap --interactive fetch extract | grep -v ^/usr/ports"
|
||||
# Using Git is much faster:
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
"rm -rf /usr/ports ; git clone --depth=1 --filter=tree:0 https://github.com/freebsd/freebsd-ports /usr/ports"
|
||||
|
||||
# Package's dependencies:
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
"cd /travis/freebsd/*/ && ( make build-depends-list && make run-depends-list ) | sed -e 's/^.*\///g' -e 's/glib20/glib/g' | sort -u | xargs -r env ASSUME_ALWAYS_YES=yes pkg install -y"
|
||||
|
||||
echo "===== The FreeBSD VM is ready! ====="
|
||||
|
||||
elif [ -z "$VARIANT" ]; then
|
||||
die "Variable VARIANT is not set for FreeBSD via QEMU which is fatal, This should be set in travis.yml"
|
||||
|
||||
else
|
||||
die "Unexpected in FreeBSD using QEMU"
|
||||
|
||||
fi
|
||||
else
|
||||
die "Invalid setting of TRAVIS_OS_NAME=$TRAVIS_OS_NAME, DOCKER=$DOCKER, QEMU=$QEMU!"
|
||||
|
||||
fi
|
54
QA/travis-ci/retry.sh
Executable file
54
QA/travis-ci/retry.sh
Executable file
@ -0,0 +1,54 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
# Based in part upon 'retry.sh' from rsplib (https://raw.githubusercontent.com/dreibh/rsplib/master/ci/retry), which is:
|
||||
# Copyright (C) 2018-2019 by Thomas Dreibholz <dreibh@iem.uni-due.de> as GPLv3 or any other GPL at your option
|
||||
|
||||
set -e
|
||||
|
||||
. QA/travis-ci/travis-common.sh
|
||||
|
||||
maxTrials=3
|
||||
pause=10
|
||||
|
||||
while [ $# -gt 1 ] ; do
|
||||
case "$1" in
|
||||
-t|--tries)
|
||||
maxTrials="$2"
|
||||
shift 2
|
||||
;;
|
||||
-p|--pause)
|
||||
pause="$2"
|
||||
shift 2
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
*)
|
||||
die "Usage: $0 [-t|--trials max_trials] [-p|--pause seconds] -- command ..."
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
attempts=1
|
||||
result=1
|
||||
command="$*"
|
||||
while [ "$result" -ne 0 ] && [ "$attempts" -le "$maxTrials" ]; do
|
||||
if [ "$attempts" -gt 1 ]; then
|
||||
printf '%s\n' "Sleeping ${pause}s ..."
|
||||
sleep "$pause"
|
||||
fi
|
||||
info "Trying $attempts/$maxTrials: $command"
|
||||
sh -c "$command" && result=$? || result=$?
|
||||
if [ "$result" -eq 127 ]; then
|
||||
# Command not found => no need for a retry!
|
||||
exit "$result"
|
||||
elif [ "$result" -ne 0 ]; then
|
||||
# Attempt failed
|
||||
attempts="$((attempts=attempts+1))"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
exit "$result"
|
35
QA/travis-ci/test.sh
Executable file
35
QA/travis-ci/test.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright 2019 Jacob Hrbek <kreyren@rixotstudio.cz>
|
||||
# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
|
||||
|
||||
# shellcheck source=QA/travis-ci/travis-common.sh
|
||||
. "QA/travis-ci/travis-common.sh"
|
||||
|
||||
# shellcheck source=QA/travis-ci/get-container.sh
|
||||
. "QA/travis-ci/get-container.sh"
|
||||
|
||||
case "$TOOL" in
|
||||
*check*) true ;;
|
||||
*) die 0 "Skipping tests as instructed"
|
||||
esac
|
||||
|
||||
# Linux as-is
|
||||
if [ "$TRAVIS_OS_NAME" = linux ] && [ -z "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
make test-rustlang
|
||||
|
||||
# Linux via Docker
|
||||
elif [ "$TRAVIS_OS_NAME" = linux ] && [ -n "$DOCKER" ] && [ -z "$QEMU" ]; then
|
||||
sudo docker exec "$CONTAINER" make --directory="/travis/Zernit" test-rustlang
|
||||
|
||||
# MacOS X
|
||||
elif [ "$TRAVIS_OS_NAME" = osx ]; then
|
||||
make --directory="/Users/travis/build/Kreyrock/Kreyrock" check
|
||||
|
||||
elif [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$QEMU" = "FreeBSD" ]; then
|
||||
ssh -p 8829 -oStrictHostKeyChecking=no -i "$HOME/.ssh/id_rsa" root@localhost \
|
||||
make check
|
||||
|
||||
else
|
||||
die "Invalid setting of TRAVIS_OS_NAME=$TRAVIS_OS_NAME, DOCKER=$DOCKER, QEMU=$QEMU!"
|
||||
|
||||
fi
|
17
QA/travis-ci/travis-common.sh
Executable file
17
QA/travis-ci/travis-common.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
# Simplified error handling
|
||||
die() {
|
||||
printf 'FATAL: %s\n' "$2"
|
||||
exit "$1"
|
||||
}
|
||||
# Simplified QA handling
|
||||
fixme() {
|
||||
printf 'FIXME: %s\n' "$1"
|
||||
}
|
||||
# Simplified info messages
|
||||
info() {
|
||||
printf 'INFO: %s\n' "$1"
|
||||
}
|
||||
warn() {
|
||||
printf 'WARN: %s\n' "$1"
|
||||
}
|
3
benches/README.md
Normal file
3
benches/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
Directory for benchmarks of the source
|
||||
|
||||
FIXME: Add benchmarks
|
16
benches/rustlang/example_bench.rs
Normal file
16
benches/rustlang/example_bench.rs
Normal file
@ -0,0 +1,16 @@
|
||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||
|
||||
fn fibonacci(n: u64) -> u64 {
|
||||
match n {
|
||||
0 => 1,
|
||||
1 => 1,
|
||||
n => fibonacci(n-1) + fibonacci(n-2),
|
||||
}
|
||||
}
|
||||
|
||||
fn criterion_benchmark(c: &mut Criterion) {
|
||||
c.bench_function("fib 20", |b| b.iter(|| fibonacci(black_box(20))));
|
||||
}
|
||||
|
||||
criterion_group!(benches, criterion_benchmark);
|
||||
criterion_main!(benches);
|
1
docker/README.md
Normal file
1
docker/README.md
Normal file
@ -0,0 +1 @@
|
||||
Directory for various Dockerfiles
|
8
docs/.gitignore
vendored
Executable file
8
docs/.gitignore
vendored
Executable file
@ -0,0 +1,8 @@
|
||||
.jekyll-cache/
|
||||
!.gitignore
|
||||
!.gitmodules
|
||||
*~
|
||||
|
||||
components/
|
||||
|
||||
_site/
|
9
docs/.gitpod.yml
Normal file
9
docs/.gitpod.yml
Normal file
@ -0,0 +1,9 @@
|
||||
image:
|
||||
file: gitpod/gitpod.Dockerfile
|
||||
|
||||
ports:
|
||||
- port: 4000
|
||||
onOpen: open-preview
|
||||
|
||||
tasks:
|
||||
- init: gem install jekyll
|
21
docs/LICENSE.md
Normal file
21
docs/LICENSE.md
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) [year] [fullname]
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
22
docs/Makefile
Normal file
22
docs/Makefile
Normal file
@ -0,0 +1,22 @@
|
||||
SRC = $(wildcard lib/*/*.js)
|
||||
HTML = $(wildcard lib/*/*.html)
|
||||
TEMPLATES = $(HTML:.html=.js)
|
||||
LESS = $(wildcard lib/*/*.less)
|
||||
CSS = $(LESS:.less=.css)
|
||||
|
||||
build: components $(SRC) $(TEMPLATES) $(CSS)
|
||||
@component build --verbose --out . --name assets
|
||||
|
||||
components: component.json
|
||||
@component install
|
||||
|
||||
%.js: %.html
|
||||
@component convert $<
|
||||
|
||||
%.css: %.less
|
||||
@lessc $< $@
|
||||
|
||||
clean:
|
||||
rm -fr build components $(TEMPLATES)
|
||||
|
||||
.PHONY: clean
|
68
docs/README.md
Executable file
68
docs/README.md
Executable file
@ -0,0 +1,68 @@
|
||||
## The "What ?" and the "Why ?"
|
||||
|
||||
**Carte** is a simple Jekyll based documentation website for APIs. It is designed as a boilerplate to build your own documentation and is heavily inspired from [Swagger](http://swagger.wordnik.com/) and [I/O docs](http://www.mashery.com/product/io-docs). Fork it, add specifications for your APIs calls and customize the theme. <small>Go ahead, see if we care.</small>
|
||||
|
||||
We built **Carte** because the existing options (Swagger and the likes) were trying to do too much and did not match our needs:
|
||||
|
||||
1. Most of our API calls are sending JSON objects, as opposed to a series of parameters,
|
||||
1. Being able to query the real API is nice, but running anything but `GET` calls can get tricky ("What do you mean I deleted my stuff? I was just trying out the API calls!"),
|
||||
1. Overall, setting up a separate server for what really requires a good static documentation seemed overkill.
|
||||
|
||||
The real value of **Carte** is its structure for describing APIs, not its underlying technical stack (or lack-thereof). In a nutshell; **we built a static template for your API documentation, feel free to re-use it**.
|
||||
|
||||
## Install
|
||||
|
||||
It' Jekyll god dammit:
|
||||
|
||||
1. Clone this repository on your local,
|
||||
1. [Install Jekyll](https://github.com/mojombo/jekyll/wiki/install),
|
||||
1. Go at the root of the repository and run ```jekyll serve --watch```,
|
||||
1. Go to http://localhost:4000,
|
||||
1. [Great success! High five!](http://www.youtube.com/watch?v=wWWyJwHQ-4E)
|
||||
|
||||
## How to...
|
||||
|
||||
### Adding a new API call
|
||||
|
||||
You can add a new API call by simply adding a new post in the `_posts` folder. Jekyll by default forces you to specify a date in the file path: it makes us sad pandas too, but you'll have to stick to this format. You can use dates to control the order in which API calls are displayed in the interface.
|
||||
|
||||
Each API call can define a few values in its YAML header:
|
||||
|
||||
Variable | Mandatory | Default | Description
|
||||
--- | --- | --- | ---
|
||||
``title`` | Y | - | A short description of what that calls does.
|
||||
``path`` | N | - | The URL for the API call, including potential parameters.
|
||||
``type`` | N | - | Set it to `PUT`, `GET`, `POST`, `DELETE` or nothing (for parts of your documentation that do not relate to an actual API call).
|
||||
|
||||
A typical header:
|
||||
|
||||
```
|
||||
---
|
||||
path: '/stuff/:id'
|
||||
title: 'Delete a thing'
|
||||
type: 'DELETE'
|
||||
|
||||
layout: nil
|
||||
---
|
||||
```
|
||||
|
||||
We then describe the request and response (or whatever else you wish to talk about) in the body of our post. Check the placeholders present in the `_posts` folder to get an idea of what it can look like.
|
||||
|
||||
### Grouping calls
|
||||
|
||||
Adding a category to your YAML header will allows you to group methods in the navigation. It is particularly helpful as you start having a lot of methods and need to organize them. For example:
|
||||
|
||||
```
|
||||
---
|
||||
category: Stuff
|
||||
path: '/stuff/:id'
|
||||
title: 'Delete a thing'
|
||||
type: 'DELETE'
|
||||
|
||||
layout: nil
|
||||
---
|
||||
```
|
||||
|
||||
### Edit the design
|
||||
|
||||
The default UI is mostly described through the `css/style.css` file and a couple short jQuery scripts in the `/_layouts/default.html` layout. Hack it to oblivion.
|
6
docs/_config.yml
Executable file
6
docs/_config.yml
Executable file
@ -0,0 +1,6 @@
|
||||
---
|
||||
exclude: ['README.markdown', 'gitpod']
|
||||
permalink: ':title'
|
||||
pygments: true
|
||||
safe: false
|
||||
title: 'Zernit'
|
19
docs/_includes/nav.html
Normal file
19
docs/_includes/nav.html
Normal file
@ -0,0 +1,19 @@
|
||||
<h1>{{ site.title }}</h1>
|
||||
<ul id='links'>
|
||||
{% for post in site.posts %}
|
||||
{% if post.category == null %}
|
||||
<li><a href='#{{ post.url }}'>{{ post.title }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% for category in site.categories %}
|
||||
<li><h2>{{ category | first }}</h2>
|
||||
<ul>
|
||||
{% for posts in category %}
|
||||
{% for post in posts %}
|
||||
<li class='{{ post.type }}'><a href='#{{ post.url }}'>{{ post.title }}</a></li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
17
docs/_layouts/default.html
Executable file
17
docs/_layouts/default.html
Executable file
@ -0,0 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>{{ site.title }}</title>
|
||||
<meta charset='utf-8'/>
|
||||
<meta name='description' content='Documentation website'/>
|
||||
<meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1'/>
|
||||
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'/>
|
||||
<link href='assets.css' rel='stylesheet' type='text/css'>
|
||||
</head>
|
||||
<body>
|
||||
{{ content }}
|
||||
|
||||
<!--[if lt IE 9]><script src='http://html5shim.googlecode.com/svn/trunk/html5.js'></script><![endif]-->
|
||||
<script src='assets.js' type='text/javascript'></script>
|
||||
<script>require('boot');</script>
|
||||
</body>
|
||||
</html>
|
10
docs/_posts/2020-02-06-review.md
Normal file
10
docs/_posts/2020-02-06-review.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
category: Maintainance
|
||||
title: 'Review process'
|
||||
|
||||
layout: nil
|
||||
---
|
||||
|
||||
FIXME-DOCS: preamble
|
||||
|
||||
1. Everything has to pass tests unless the merge request is not causing the test failure
|
639
docs/assets.css
Normal file
639
docs/assets.css
Normal file
@ -0,0 +1,639 @@
|
||||
/*! normalize.css v2.1.0 | MIT License | git.io/normalize */
|
||||
|
||||
/* ==========================================================================
|
||||
HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct `inline-block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address `outline` inconsistency between Chrome and other browsers.
|
||||
*/
|
||||
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set consistent quote types.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow displayed oddly in IE 9.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Figures
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari 5.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct font family not being inherited in all browsers.
|
||||
* 2. Correct font size not being inherited in all browsers.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9.
|
||||
* 2. Remove excess padding in IE 8/9.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* GENERAL */
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
body,
|
||||
input,
|
||||
textarea {
|
||||
color: #191919;
|
||||
font: 14px/140% 'Open Sans', Arial, sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #119bdf;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
color: #29aeef;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
p,
|
||||
ul,
|
||||
code {
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: 'Monaco', monospace, sans-serif;
|
||||
}
|
||||
|
||||
/* SIDEBAR */
|
||||
#sidebar {
|
||||
background: #191919;
|
||||
color: #fff;
|
||||
float: left;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
#sidebar h1 {
|
||||
background: #111;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#sidebar h2 {
|
||||
color: #888;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#sidebar ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#sidebar ul#links {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
#sidebar ul ul {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
#sidebar ul li a {
|
||||
color: #fff;
|
||||
display: block;
|
||||
padding: 0 0 15px;
|
||||
}
|
||||
#sidebar ul li a:active,
|
||||
#sidebar ul li a.active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#sidebar input {
|
||||
background: #111;
|
||||
border: 0;
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.2);
|
||||
color: #ddd;
|
||||
margin-bottom: 20px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
#sidebar input:active,
|
||||
#sidebar input:focus {
|
||||
border-color: #ccc;
|
||||
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
|
||||
-webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* References */
|
||||
#content {
|
||||
padding: 20px;
|
||||
padding-left: 260px;
|
||||
max-width: 700px;
|
||||
}
|
||||
|
||||
#content .control {
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
#content article {
|
||||
clear: both;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
#content article > a {
|
||||
background: #333;
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
padding: 15px;
|
||||
}
|
||||
#content article > a:hover {
|
||||
background: #222;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#content a h2 {
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#content a h2 code {
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#content a h2 code b {
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
color: #fff;
|
||||
font-weight: normal;
|
||||
padding: 3px 6px;
|
||||
}
|
||||
|
||||
/* Default */
|
||||
#content article {
|
||||
border-color: #e2e7ea;
|
||||
}
|
||||
|
||||
#content article a h2 code {
|
||||
color: #657e8b;
|
||||
}
|
||||
|
||||
#content article a h2 code b {
|
||||
background: #657e8b;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
/* GET */
|
||||
#content article.GET a h2 code {
|
||||
color: #119bdf;
|
||||
}
|
||||
|
||||
#content article.GET a h2 code b {
|
||||
background: #119bdf;
|
||||
}
|
||||
|
||||
/* POST */
|
||||
#content article.POST a h2 code {
|
||||
color: #52ce0e;
|
||||
}
|
||||
|
||||
#content article.POST a h2 code b {
|
||||
background: #52ce0e;
|
||||
}
|
||||
|
||||
/* PUT */
|
||||
#content article.PUT a h2 code {
|
||||
color: #e08f10;
|
||||
}
|
||||
|
||||
#content article.PUT a h2 code b {
|
||||
background: #e08f10;
|
||||
}
|
||||
|
||||
/* DELETE */
|
||||
#content article.DELETE a h2 code {
|
||||
color: #e02a10;
|
||||
}
|
||||
|
||||
#content article.DELETE a h2 code b {
|
||||
background: #e02a10;
|
||||
}
|
||||
|
||||
/* Reference's body */
|
||||
#content h3 {
|
||||
}
|
||||
|
||||
#content .body {
|
||||
border-top: 1px solid #eef1f2;
|
||||
display: block;
|
||||
padding: 15px 15px 0;
|
||||
}
|
||||
|
||||
#content .body code {
|
||||
border: 1px solid #e2e7ea;
|
||||
background: #eef1f2;
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
color: #546974;
|
||||
padding: 0 1px;
|
||||
}
|
||||
|
||||
#content .body p > code {
|
||||
display: block;
|
||||
padding: 15px;
|
||||
white-space: pre;
|
||||
}
|
9721
docs/assets.js
Normal file
9721
docs/assets.js
Normal file
File diff suppressed because it is too large
Load Diff
7
docs/component.json
Normal file
7
docs/component.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "carte",
|
||||
"description": "Simple API reference",
|
||||
"version": "0.0.1",
|
||||
"local": ["boot"],
|
||||
"paths": ["lib"]
|
||||
}
|
7
docs/gitpod/gitpod.Dockerfile
Normal file
7
docs/gitpod/gitpod.Dockerfile
Normal file
@ -0,0 +1,7 @@
|
||||
FROM gitpod/workspace-full-vnc
|
||||
|
||||
USER root
|
||||
|
||||
## JEKYLL ##
|
||||
|
||||
RUN apt update && apt install -y ruby ruby-dev firefox
|
18
docs/index.html
Executable file
18
docs/index.html
Executable file
@ -0,0 +1,18 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<nav id='sidebar'>
|
||||
{% include nav.html %}
|
||||
</nav>
|
||||
|
||||
<section id='content'>
|
||||
{% for post in site.posts %}
|
||||
<article class='{{ post.type }}'>
|
||||
<a name='{{ post.url }}' href='#{{ post.url }}'><h2>{% if post.type %}<code><b>{{ post.type }}</b> {{ post.path }}</code> {% endif %}{{ post.title }}</h2></a>
|
||||
<section class='body'>
|
||||
{{ post.content }}
|
||||
</section>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</section>
|
11
docs/lib/boot/component.json
Normal file
11
docs/lib/boot/component.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "boot",
|
||||
"description": "Main app boot component",
|
||||
"dependencies": {
|
||||
"necolas/normalize.css": "*",
|
||||
"component/jquery": "*"
|
||||
},
|
||||
"local": ["filter"],
|
||||
"scripts": ["index.js"],
|
||||
"styles": ["style.css"]
|
||||
}
|
49
docs/lib/boot/index.js
Normal file
49
docs/lib/boot/index.js
Normal file
@ -0,0 +1,49 @@
|
||||
var $ = require('jquery'),
|
||||
Filter = require('filter');
|
||||
|
||||
// Collapsible articles
|
||||
$('article').each(function () {
|
||||
var that = $(this);
|
||||
var header = that.children('a');
|
||||
var body = that.children('.body');
|
||||
body.hide();
|
||||
header.toggle(
|
||||
function () { body.slideDown('fast'); that.addClass('active'); },
|
||||
function () { body.slideUp('fast'); that.removeClass('active'); }
|
||||
);
|
||||
});
|
||||
|
||||
var anchor = window.location.hash.substring(1);
|
||||
if (anchor) $('article a[name=' + anchor + ']').trigger('click');
|
||||
|
||||
// Expanding the article on link click and scrolling down to it
|
||||
$('#sidebar a').each(function () {
|
||||
var that = $(this);
|
||||
var id = that.attr('href').substring(1);
|
||||
that.click(function (e) {
|
||||
var header = $('article a[name="'+ id +'"]')
|
||||
if (!header.parent().hasClass('active')) header.trigger('click');
|
||||
$('html, body').animate({ scrollTop: header.offset().top }, 'fast');
|
||||
});
|
||||
|
||||
// If we find a link in the body with similar anchor, add the same behavior
|
||||
$('.body a[href=#'+ id +']').click(function (e) {
|
||||
$('#sidebar a[href=#'+ id +']').trigger('click');
|
||||
});
|
||||
});
|
||||
|
||||
// Hide all/Show all links
|
||||
var show = $('<a class=\'control show\'>Show all</a>');
|
||||
show.click(function () {
|
||||
$('#content article:not(".active") > a').trigger('click');
|
||||
});
|
||||
$('#content').prepend(show);
|
||||
|
||||
var hide = $('<a class=\'control hide\'>Hide all</a>');
|
||||
hide.click(function () {
|
||||
$('#content article.active > a').trigger('click');
|
||||
});
|
||||
$('#content').prepend(hide);
|
||||
|
||||
// Making our navigation sticky
|
||||
new Filter($('#sidebar > ul'));
|
240
docs/lib/boot/style.css
Normal file
240
docs/lib/boot/style.css
Normal file
@ -0,0 +1,240 @@
|
||||
/* GENERAL */
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
body,
|
||||
input,
|
||||
textarea {
|
||||
color: #191919;
|
||||
font: 14px/140% 'Open Sans', Arial, sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #119bdf;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
color: #29aeef;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
p,
|
||||
ul,
|
||||
code {
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: 'Monaco', monospace, sans-serif;
|
||||
}
|
||||
|
||||
/* SIDEBAR */
|
||||
#sidebar {
|
||||
background: #191919;
|
||||
color: #fff;
|
||||
float: left;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
#sidebar h1 {
|
||||
background: #111;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#sidebar h2 {
|
||||
color: #888;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#sidebar ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#sidebar ul#links {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
#sidebar ul ul {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
#sidebar ul li a {
|
||||
color: #fff;
|
||||
display: block;
|
||||
padding: 0 0 15px;
|
||||
}
|
||||
#sidebar ul li a:active,
|
||||
#sidebar ul li a.active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#sidebar input {
|
||||
background: #111;
|
||||
border: 0;
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.2);
|
||||
color: #ddd;
|
||||
margin-bottom: 20px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
#sidebar input:active,
|
||||
#sidebar input:focus {
|
||||
border-color: #ccc;
|
||||
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
|
||||
-webkit-box-shadow: inset 0 1px 5px rgba(0, 0, 0, 0.1);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* References */
|
||||
#content {
|
||||
padding: 20px;
|
||||
padding-left: 260px;
|
||||
max-width: 700px;
|
||||
}
|
||||
|
||||
#content .control {
|
||||
cursor: pointer;
|
||||
font-size: 12px;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
#content article {
|
||||
clear: both;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
#content article > a {
|
||||
background: #333;
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
padding: 15px;
|
||||
}
|
||||
#content article > a:hover {
|
||||
background: #222;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#content a h2 {
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#content a h2 code {
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#content a h2 code b {
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
color: #fff;
|
||||
font-weight: normal;
|
||||
padding: 3px 6px;
|
||||
}
|
||||
|
||||
/* Default */
|
||||
#content article {
|
||||
border-color: #e2e7ea;
|
||||
}
|
||||
|
||||
#content article a h2 code {
|
||||
color: #657e8b;
|
||||
}
|
||||
|
||||
#content article a h2 code b {
|
||||
background: #657e8b;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
/* GET */
|
||||
#content article.GET a h2 code {
|
||||
color: #119bdf;
|
||||
}
|
||||
|
||||
#content article.GET a h2 code b {
|
||||
background: #119bdf;
|
||||
}
|
||||
|
||||
/* POST */
|
||||
#content article.POST a h2 code {
|
||||
color: #52ce0e;
|
||||
}
|
||||
|
||||
#content article.POST a h2 code b {
|
||||
background: #52ce0e;
|
||||
}
|
||||
|
||||
/* PUT */
|
||||
#content article.PUT a h2 code {
|
||||
color: #e08f10;
|
||||
}
|
||||
|
||||
#content article.PUT a h2 code b {
|
||||
background: #e08f10;
|
||||
}
|
||||
|
||||
/* DELETE */
|
||||
#content article.DELETE a h2 code {
|
||||
color: #e02a10;
|
||||
}
|
||||
|
||||
#content article.DELETE a h2 code b {
|
||||
background: #e02a10;
|
||||
}
|
||||
|
||||
/* Reference's body */
|
||||
#content h3 {
|
||||
}
|
||||
|
||||
#content .body {
|
||||
border-top: 1px solid #eef1f2;
|
||||
display: block;
|
||||
padding: 15px 15px 0;
|
||||
}
|
||||
|
||||
#content .body code {
|
||||
border: 1px solid #e2e7ea;
|
||||
background: #eef1f2;
|
||||
border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
color: #546974;
|
||||
padding: 0 1px;
|
||||
}
|
||||
|
||||
#content .body p > code {
|
||||
display: block;
|
||||
padding: 15px;
|
||||
white-space: pre;
|
||||
}
|
8
docs/lib/filter/component.json
Normal file
8
docs/lib/filter/component.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "filter",
|
||||
"description": "Makes lists of links filterable.",
|
||||
"dependencies": {
|
||||
"component/jquery": "*"
|
||||
},
|
||||
"scripts": ["index.js"]
|
||||
}
|
48
docs/lib/filter/index.js
Normal file
48
docs/lib/filter/index.js
Normal file
@ -0,0 +1,48 @@
|
||||
// Dependencies
|
||||
var $ = require('jquery');
|
||||
|
||||
// Expose `Filter`.
|
||||
module.exports = Filter;
|
||||
|
||||
// Case-insensitive contains()
|
||||
$.expr[':'].Contains = function(a,i,m){
|
||||
return (a.textContent || a.innerText || '').toUpperCase().indexOf(m[3].toUpperCase())>=0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize a filterable list.
|
||||
*/
|
||||
function Filter(list) {
|
||||
this.el = list;
|
||||
|
||||
// Filter input
|
||||
var form = $('<form>').attr({ 'action':'#' });
|
||||
var input = $('<input>').attr({ 'type':'text', 'placeholder':'Filter by keyword' });
|
||||
$(form).append(input).prependTo(this.el);
|
||||
|
||||
// Filter function
|
||||
var self = this;
|
||||
$(input).change(function () {
|
||||
var filter = $(this).val();
|
||||
if(filter) {
|
||||
$(self.el).find('a:not(:Contains(' + filter + '))').parent().hide();
|
||||
$(self.el).find('a:Contains(' + filter + ')').parent().show();
|
||||
} else {
|
||||
$(self.el).find('li').show();
|
||||
}
|
||||
|
||||
// Hide titles when group is empty
|
||||
$(self.el).find('ul').each(function () {
|
||||
if (!$(this).find('li:visible').length) {
|
||||
$(this).prev('h2').hide();
|
||||
} else {
|
||||
$(this).prev('h2').show();
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
})
|
||||
.keyup( function () { $(this).change(); });
|
||||
|
||||
return this;
|
||||
}
|
2
docs/robots.txt
Executable file
2
docs/robots.txt
Executable file
@ -0,0 +1,2 @@
|
||||
User-agent: *
|
||||
Disallow: /images/
|
3
gitpod/README.md
Normal file
3
gitpod/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Configuration for gitpod
|
||||
|
||||
This directory is used for various configuration on [gitpod](https://gitpod.io/)
|
1
gitpod/exherbo.Dockerfile
Normal file
1
gitpod/exherbo.Dockerfile
Normal file
@ -0,0 +1 @@
|
||||
FROM scratch
|
32
gitpod/gitpod.Dockerfile
Normal file
32
gitpod/gitpod.Dockerfile
Normal file
@ -0,0 +1,32 @@
|
||||
FROM gitpod/workspace-full-vnc:latest
|
||||
|
||||
# To avoid bricked workspaces (https://github.com/gitpod-io/gitpod/issues/1171)
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# APT management (https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#apt-get)
|
||||
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \
|
||||
&& add-apt-repository \
|
||||
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) \
|
||||
stable" \
|
||||
&& apt-get update \
|
||||
&& apt-get upgrade -y \
|
||||
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \
|
||||
&& apt dist-upgrade -y \
|
||||
&& apt-get install -y clang shellcheck docker-ce docker-ce-cli containerd.io firefox tree xclip umbrello gnuplot \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& apt autoremove -y
|
||||
|
||||
### VLANG ###
|
||||
USER root
|
||||
ENV VLANG_VERSION="0.1.24"
|
||||
COPY gitpod/vlang_init4.sh /usr/bin/vlang_init
|
||||
RUN chmod +x /usr/bin/vlang_init
|
||||
RUN vlang_init || exit 1
|
||||
|
||||
# Add custom functions
|
||||
RUN if ! grep -qF 'ix()' /etc/bash.bashrc; then printf '%s\n' \
|
||||
'# Custom' \
|
||||
"ix() { curl -F 'f:1=<-' ix.io 2>/dev/null ;}" \
|
||||
"xcopy() { xclip -se C ;}" \
|
||||
>> /etc/bash.bashrc; fi
|
158
gitpod/vlang_init4.sh
Normal file
158
gitpod/vlang_init4.sh
Normal file
@ -0,0 +1,158 @@
|
||||
#!/bin/sh
|
||||
# Created by Jacob Hrbek <kreyren@rixotstudio.cz> under license GPL-3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
|
||||
# Based in part on https://github.com/JesterOrNot/Gitpod-V which is created by Sean Hellum as unlicense
|
||||
|
||||
: "
|
||||
Initialization script made for gitpod to install vlang backend in gitpod
|
||||
|
||||
This script is developed to be POSIX-compatible
|
||||
|
||||
Use environment variable '$DEBUG' to output verbose info
|
||||
|
||||
CONFIGURATION
|
||||
- $VLANG_SOURCE = Path used for extraction and keeping of vlang source files
|
||||
- $VLANG_VERSION = Expected vlang version (value 'latest' is supported through GitHub API)
|
||||
- $VLANG_GROUP = Group used for those that are expected to have access in vlang
|
||||
- $CACHEDIR = Path for cache directory, based on FSH3.0 (270120) this should be '$HOME/.cache'
|
||||
- $VLANG_EXE = Path to which we will extract executable for vlang
|
||||
"
|
||||
|
||||
# Configuration
|
||||
[ -z "$VLANG_SOURCE" ] && VLANG_SOURCE="/opt/vlang"
|
||||
[ -z "$VLANG_VERSION" ] && VLANG_VERSION="0.1.24"
|
||||
[ -z "$VLANG_GROUP" ] && VLANG_GROUP="vlang"
|
||||
[ -z "$CACHEDIR" ] && CACHEDIR="$HOME/.cache"
|
||||
[ -z "$VLANG_EXE" ] && VLANG_EXE="/usr/bin/v"
|
||||
|
||||
# Simplified die for assertion
|
||||
die() {
|
||||
[ -z "$DIE_PREFIX" ] && DIE_PREFIX="FATAL:"
|
||||
printf "$DIE_PREFIX %s\\n" "$2"
|
||||
unset VLANG_SOURCE VLANG_VERSION DIE_PREFIX CACHEDIR VLANG_EXE
|
||||
exit "$1"
|
||||
}
|
||||
|
||||
edebug() {
|
||||
[ -z "$DEBUG_PREFIX" ] && DEBUG_PREFIX="DEBUG:"
|
||||
[ -n "$DEBUG" ] && printf "$DEBUG_PREFIX %s\\n" "$1"
|
||||
}
|
||||
|
||||
# checkroot
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
die 3 "Insufficient permission UID '$(id -u)' used for vlang initialization"
|
||||
elif [ "$(id -u)" = "0" ]; then
|
||||
edebug "Script has been executed from expected used with UID '$(id -u)'"
|
||||
else
|
||||
die 256 "Unexpected happend while checking root"
|
||||
fi
|
||||
|
||||
# Define latest version
|
||||
case "$VLANG_VERSION" in
|
||||
[0-9].[0-9].[0-9]|[0-9][0-9].[0-9].[0-9]|[0-9][0-9].[0-9][0-9].[0-9]|[0-9][0-9].[0-9][0-9].[0-9][0-9]|[0-9].[0-9][0-9].[0-9]|[0-9].[0-9].[0-9][0-9]) true ;;
|
||||
latest)
|
||||
VLANG_VERSION="$(curl https://api.github.com/repos/vlang/v/releases/latest 2>/dev/null | grep tag_name | sed '/^[[:blank:]]*"tag_name":[[:blank:]]*"\([^"]*\)",[[:blank:]]*$/!d; s//\1/; q' || die 4 "Unable to get latest vlang version for GitHub API")" ;;
|
||||
*) die 2 "Unsupported vlang version '$VLANG_VERSION' has been parsed in vlang_init script"
|
||||
esac
|
||||
|
||||
# Create cachedir
|
||||
if [ ! -d "$CACHEDIR" ]; then
|
||||
mkdir "$CACHEDIR" || die 1 "Unable to make a new directory in '$HOME/.cache' used for caching"
|
||||
edebug "Created a new directory in '$CACHEDIR' used for caching"
|
||||
elif [ -d "$CACHEDIR" ]; then
|
||||
edebug "Directory '$CACHEDIR' already exits, skipping creation"
|
||||
else
|
||||
die 256 "Unexpected happend while creating chachedir, bug?"
|
||||
fi
|
||||
|
||||
# Fetch
|
||||
if [ ! -f "$CACHEDIR/vlang-$VLANG_VERSION.zip" ]; then
|
||||
wget "https://github.com/vlang/v/releases/download/$VLANG_VERSION/v_linux.zip" -O "$CACHEDIR/vlang-$VLANG_VERSION.zip" || die 1 "Unable to fetch vlang tarball"
|
||||
edebug "Vlang source tarball has been exported in '$CACHEDIR/vlang-$VLANG_VERSION.zip'"
|
||||
elif [ -f "$CACHEDIR/vlang-$VLANG_VERSION.zip" ]; then
|
||||
edebug "File '$CACHEDIR/vlang-$VLANG_VERSION.zip' already exists, skipping fetch"
|
||||
else
|
||||
die 256 "Unexpected happend while fetching vlang source tarball in '$CACHEDIR/vlang-$VLANG_VERSION'"
|
||||
fi
|
||||
|
||||
# Create a new directory used for source files
|
||||
if [ ! -d "$VLANG_SOURCE" ]; then
|
||||
mkdir "$VLANG_SOURCE" || die 1 "Unable to create a new directory for source extraction of vlang"
|
||||
edebug "Created a new directory in '$VLANG_SOURCE' used for vlang source files"
|
||||
elif [ -d "$VLANG_SOURCE" ]; then
|
||||
edebug "Directory in '$VLANG_SOURCE' is already present, skipping creation"
|
||||
else
|
||||
die 256 "Unexpected happend while creating a new directory in '$VLANG_SOURCE'"
|
||||
fi
|
||||
|
||||
# Extract
|
||||
if [ ! -f "$VLANG_SOURCE/Makefile" ]; then
|
||||
unzip "$CACHEDIR/vlang-$VLANG_VERSION.zip" -d "$VLANG_SOURCE" || die 1 "Unable to extract vlang source in '$VLANG_SOURCE' directory"
|
||||
edebug "vlang source files has been extracted in '$VLANG_SOURCE'"
|
||||
elif [ -f "$VLANG_SOURCE/Makefile" ]; then
|
||||
edebug "vlang source files are already extracted, skipping extract"
|
||||
else
|
||||
die 256 "Unexpected happend while extracting vlang source files"
|
||||
fi
|
||||
|
||||
# Compile
|
||||
if [ ! -f "$VLANG_SOURCE/v" ]; then
|
||||
make -C "$VLANG_SOURCE" || die 1 "This system is unable to compile vlang"
|
||||
edebug "vlang has been sucessfully compiled"
|
||||
elif [ -f "$VLANG_SOURCE/v" ]; then
|
||||
edebug "vlang is already compiled, skipping compilation"
|
||||
else
|
||||
die 256 "Unexpected happend while compiling vlang source files"
|
||||
fi
|
||||
|
||||
# Export executable
|
||||
if [ ! -h "$VLANG_EXE" ] && [ ! -f "$VLANG_EXE" ]; then
|
||||
ln -sf "$VLANG_SOURCE/v" "$VLANG_EXE" || die 1 "Unable to symlink vlang executable in '$VLANG_EXE'"
|
||||
edebug "Vlang executable has been sucessfully symlinked"
|
||||
elif [ -f "$VLANG_EXE" ]; then
|
||||
die 1 "Pathname '$VLANG_EXE' is a file where symlink to compiled vlang compiler is expected"
|
||||
elif [ -h "$VLANG_EXE" ]; then
|
||||
edebug "Vlang executable is already symlinked, skipping.."
|
||||
fi
|
||||
|
||||
# Create a new user-group for vlang users
|
||||
if ! grep -qF vlang /etc/passwd 2>/dev/null; then
|
||||
groupadd vlang || die 1 "Unable to make a new user-group 'vlang'"
|
||||
edebug "Created a new user-group 'vlang'"
|
||||
elif grep -qF vlang /etc/passwd 2>/dev/null; then
|
||||
edebug "User-group 'vlang' already exists, skipping creation"
|
||||
else
|
||||
die 256 "Unexpected happend while creating new user-group 'vlang'"
|
||||
fi
|
||||
|
||||
# Transfer ownership of VLANG_SOURCE to vlang user-group
|
||||
if [ "$(stat -c '%G' "$VLANG_SOURCE")" != vlang ]; then
|
||||
chown -R root:vlang "$VLANG_SOURCE" || die 1 "Unable to transfer ownership of '$VLANG_SOURCE' directory to vlang user-group"
|
||||
edebug "Permission to '$VLANG_SOURCE' directory has been transfered to vlang user-group"
|
||||
elif [ "$(stat -c '%G' "$VLANG_SOURCE")" = vlang ]; then
|
||||
edebug "Directory '$VLANG_SOURCE' is already owned by 'vlang' user-group"
|
||||
else
|
||||
die 256 "Unexpected happend while transfering '$VLANG_SOURCE' directory to 'vlang' user-group"
|
||||
fi
|
||||
|
||||
# Add gitpod user in vlang group
|
||||
if ! groups | grep -qF "$VLANG_GROUP"; then
|
||||
usermod -a -G "$VLANG_GROUP" gitpod || die 1 "Unable to transfer user 'gitpod' in user-group '$VLANG_GROUP'"
|
||||
chmod -R 0775 "$VLANG_SOURCE" || die 1 "Unable to set ownership to '$VLANG_SOURCE"
|
||||
edebug "User 'gitpod' has been added in user-group '$VLANG_GROUP'"
|
||||
elif groups | grep -qF $VLANG_GROUP; then
|
||||
edebug "User 'gitpod' is already in user-group '$VLANG_GROUP'"
|
||||
else
|
||||
die 256 "Unexpected happend while adding user 'gitpod' in user-group '$VLANG_GROUP'"
|
||||
fi
|
||||
|
||||
# Selfcheck
|
||||
# FIXME: Fix selfcheck
|
||||
# su gitpod -c "$VLANG_EXE" help 1>/dev/null
|
||||
|
||||
# case "$?" in
|
||||
# 0) printf 'INFO: %s\n' "builtin vlang selfcheck passed" ;;
|
||||
# *) die "$?" "builtin vlang selfcheck failed"
|
||||
# esac
|
||||
|
||||
# Master unset
|
||||
unset VLANG_SOURCE VLANG_VERSION DIE_PREFIX CACHEDIR VLANG_EXE
|
9
po/README.md
Normal file
9
po/README.md
Normal file
@ -0,0 +1,9 @@
|
||||
Directory used for translations
|
||||
|
||||
files in this directory can be translated in different format on demand if development requires it.
|
||||
|
||||
### Abstract
|
||||
|
||||
This is expected to be crowd-sourced using Crowdin and alike
|
||||
|
||||
Expecting sourcing from various programming languages
|
2
po/english.toml
Normal file
2
po/english.toml
Normal file
@ -0,0 +1,2 @@
|
||||
myvar = "test_v"
|
||||
myvar2 = "test1_v"
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
# Dependencies for python
|
||||
|
||||
termcolor==1.1.0
|
12
src/README.md
Normal file
12
src/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# Source code of RXT0112
|
||||
|
||||
This is stub file used for various informations about the source that cannot be placed in the files itself
|
||||
|
||||
**FIXME:** Add Flow chart
|
||||
|
||||
**FIXME:** Add Dependency flow chart
|
||||
|
||||
**FIXME:** Add Mindmap
|
||||
|
||||
### References
|
||||
Rust source hierarchy - https://doc.rust-lang.org/cargo/reference/manifest.html#the-project-layout
|
14
src/bin/README.md
Normal file
14
src/bin/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
FIXME: `main` is a place-holder -> Looking for a good name for backend resolver for zernit's backend i.e [paludis](https://paludis.exherbo.org/) using `cave`
|
||||
|
||||
---
|
||||
|
||||
# Core binary
|
||||
This directory is used for core binary meaning that this binary is executed first and should resolve to required commands i.e if end-user executes `main help` expecting usage instructions then this binary should resolve the argument and execute `$repodir/src/subcoms/help` in it's appropriate place on the system once compiled (if applies) unless the language has more efficient method to handle this scenario through library alike rustlang's clap that generates the help message based on arguments provided.
|
||||
|
||||
## ABSTRACT
|
||||
Resolve arguments to subcommands and provide backend for libraries/modules if requried
|
||||
|
||||
### Practical examples
|
||||
end-user inputs `main help` through cli -> Display help message
|
||||
|
||||
end-user inputs `main resolve app-compat/wine` -> Resolve wine on end-user's system if compatible system and toolchain is used
|
BIN
src/bin/__pycache__/main.cpython-37-pytest-5.3.5.pyc
Normal file
BIN
src/bin/__pycache__/main.cpython-37-pytest-5.3.5.pyc
Normal file
Binary file not shown.
13
src/bin/main.bash
Normal file
13
src/bin/main.bash
Normal file
@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
printf '%s\n' "ping"
|
||||
|
||||
# Argument management
|
||||
while [ $# -ge 1 ]; do case $1 in
|
||||
--help|-h|help)
|
||||
fixme "Help message here"
|
||||
shift 1
|
||||
;;
|
||||
*)
|
||||
die 2 "FIXME: Syntax error"
|
||||
esac; done
|
2
src/bin/main.bf
Normal file
2
src/bin/main.bf
Normal file
@ -0,0 +1,2 @@
|
||||
[ Refer to documentation of this command for further informations ]
|
||||
-[------->+<]>---.+++.>+[--->++<]>++.-----------.--------.-----------.[-->+<]>+++.>-[--->+<]>-.-[--->+<]>+.+++[->+++<]>++.+++++++++++++.+++++.-------.-----------.--[--->+<]>-.+++[->+++<]>.--[--->+<]>-.-[->++++<]>--.---[->+++<]>.+++++++++++++.----.-----.+++++++++++.[---->+<]>+++.-[--->++<]>-.+++++.++++++.-----.[--->+<]>-----.[->+++<]>+.-[->+++<]>.[->+++<]>++.[--->+<]>----.+++[->+++<]>++.++++++++.+++++.--------.-[--->+<]>--.+[->+++<]>+.++++++++.
|
19
src/bin/main.c
Normal file
19
src/bin/main.c
Normal file
@ -0,0 +1,19 @@
|
||||
#include <stdio.h>
|
||||
|
||||
// FIXME: Does not build on clang
|
||||
// FIXME-QA: Outputs warnings
|
||||
|
||||
int main(int argc, char ** argv[]) {
|
||||
if(argc < 2) {
|
||||
// FIXME: Add better help message
|
||||
// FIXME: Source from po depending on language used
|
||||
printf("%s\n", "Argument(s) required, use -h for display help");
|
||||
return 2;
|
||||
} else if(strcmp(argv[1], "-h") == 0) {
|
||||
printf("FIXME: %s\n", "Add optionsi");
|
||||
return 1;
|
||||
} else {
|
||||
printf("FATAL: %s\n", "Unexpected happend while processing arguments");
|
||||
return 256;
|
||||
}
|
||||
}
|
9
src/bin/main.cpp
Normal file
9
src/bin/main.cpp
Normal file
@ -0,0 +1,9 @@
|
||||
#include <iostream>
|
||||
// test
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
// Refer to the documentation
|
||||
cout << "FIXME: Translate zernit into a C++++";
|
||||
return 1;
|
||||
}
|
22
src/bin/main.cs
Normal file
22
src/bin/main.cs
Normal file
@ -0,0 +1,22 @@
|
||||
// C# program to print Hello World!
|
||||
using System;
|
||||
|
||||
// namespace declaration
|
||||
namespace HelloWorldApp {
|
||||
|
||||
// Class declaration
|
||||
class Geeks {
|
||||
|
||||
// Main Method
|
||||
static void Main(string[] args) {
|
||||
|
||||
// statement
|
||||
// printing Hello World!
|
||||
Console.WriteLine("Hello World!");
|
||||
|
||||
// To prevents the screen from
|
||||
// running and closing quickly
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
}
|
11
src/bin/main.go
Normal file
11
src/bin/main.go
Normal file
@ -0,0 +1,11 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func helloworld() string {
|
||||
return "Hello World!!"
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(helloworld())
|
||||
}
|
12
src/bin/main.jar
Normal file
12
src/bin/main.jar
Normal file
@ -0,0 +1,12 @@
|
||||
/* This is a simple Java program.
|
||||
FileName : "HelloWorld.java". */
|
||||
|
||||
class HelloWorld
|
||||
{
|
||||
// Your program begins with a call to main().
|
||||
// Prints "Hello, World" to the terminal window.
|
||||
public static void main(String args[])
|
||||
{
|
||||
System.out.println("Hello, World");
|
||||
}
|
||||
}
|
39
src/bin/main.py
Normal file
39
src/bin/main.py
Normal file
@ -0,0 +1,39 @@
|
||||
import sys
|
||||
from termcolor import cprint
|
||||
|
||||
"""
|
||||
FIXME-DOCS: Add documentation
|
||||
|
||||
Made for Python 3.6 ~ Python 3.8.1
|
||||
Requires pip for termcolor
|
||||
"""
|
||||
|
||||
# FIXME: Add logic to generate help message and handle arguments automatically
|
||||
|
||||
def cli_arg():
|
||||
if len(sys.argv) == 1:
|
||||
cprint("No Arguments Were Passed. Type -h to view basic usage.", "red")
|
||||
exit()
|
||||
# sys.arg[1] is the file itself.
|
||||
elif sys.argv[1].lower() == "-h":
|
||||
cprint("""
|
||||
File used as bankend to parse arguments and options into subcommands
|
||||
|
||||
SYNOPSIS: command OPTION [SUBCOMS]
|
||||
|
||||
OPTIONS:
|
||||
-G, --gui Open Graphical User Interface
|
||||
|
||||
SUBCOMS (Subcommands):
|
||||
resolve resolve package on the system
|
||||
""", "green")
|
||||
|
||||
else:
|
||||
cprint("Incorrect Argument! Type -h to view basic usage.", "red")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
cli_arg()
|
||||
except IndexError:
|
||||
pass
|
96
src/bin/main.rs
Normal file
96
src/bin/main.rs
Normal file
@ -0,0 +1,96 @@
|
||||
// Created by Jacob Hrbek <kreyren@rixotstudio.cz> under GPL-3 license (https://www.gnu.org/licenses/gpl-3.0.en.html) in 2020
|
||||
|
||||
/*
|
||||
File used as bankend to parse arguments and options into subcommands
|
||||
|
||||
SYNOPSIS: command OPTION [SUBCOMS]
|
||||
|
||||
OPTIONS:
|
||||
-G, --gui Open Graphical User Interface
|
||||
|
||||
SUBCOMS (Subcommands):
|
||||
resolve resolve package on the system
|
||||
*/
|
||||
|
||||
// Sourcing
|
||||
// FIXME-QA: Is this the best way to do this?
|
||||
// FIXME: Source the crate based on the name in Cargo.toml
|
||||
use zernit_logger::fixme;
|
||||
// For argument management
|
||||
use clap::{Arg, App, SubCommand};
|
||||
|
||||
fn main() {
|
||||
fixme!("Add method to handle translations");
|
||||
fixme!("Allow changing name based on config file");
|
||||
fixme!("Verify that this works on POSIX");
|
||||
|
||||
// Capture arguments (https://docs.rs/clap/2.33.0/clap/)
|
||||
// FIXME-BENCHMARK: Benchmark other option like structOpt (https://docs.rs/structopt/0.3.7/structopt/#subcommands)
|
||||
// FIXME-TEST: Add test to make sure that clap works the way we want it
|
||||
|
||||
let matches = App::new("RXT0112")
|
||||
.version("INIT_PHASE_VERSION") // Replace with valid versioning
|
||||
.author("Jacob Hrbek <kreyren@rixotstudio.cz>")
|
||||
.about("Work in progress package manager expected to support any kernel on any downstream")
|
||||
.arg(Arg::with_name("gui")
|
||||
.short("G")
|
||||
.long("gui")
|
||||
.multiple(true)
|
||||
.help("Opens up a Graphical User Interface frontend"))
|
||||
.arg(Arg::with_name("dev")
|
||||
.short("D")
|
||||
.long("development")
|
||||
.multiple(true)
|
||||
.help("Perform all following actions in a temporary sandboxed directory used for development"))
|
||||
// FIXME-QA: Sort subcommands alphabetically
|
||||
.subcommand(SubCommand::with_name("resolve")
|
||||
.about("Resolved package to be imported in the system")
|
||||
.arg_from_usage("<category/package> 'Package identifier'"))
|
||||
.subcommand(SubCommand::with_name("remove")
|
||||
.about("Remove package from the system")
|
||||
.arg_from_usage("-r, remove 'Removing of packages'"))
|
||||
.subcommand(SubCommand::with_name("list")
|
||||
.about("Listing of packages")
|
||||
.arg_from_usage("-l, list 'Listing of packages'"))
|
||||
.subcommand(SubCommand::with_name("deploy")
|
||||
.about("deploy (WIP-NAME) on target used for initial instalation")
|
||||
.arg_from_usage("-l, list 'Listing of packages'"))
|
||||
// FIXME: Replace with following: .arg_from_usage("deploy 'Deploy (WIP-NAME) on target which creates required file hierarchy and configuration needed for (WIP-NAME)'"))
|
||||
.subcommand(SubCommand::with_name("hijack")
|
||||
.about("Import (WIP-NAME) on target system that already exists for (WIP-NAME) to be used as alternative package manager")
|
||||
.arg_from_usage("-l, list 'Listing of packages'"))
|
||||
// FIXME: Replace with following: .arg_from_usage("hijack 'Import (WIP-NAME) on target system that already exists for (WIP-NAME) to be used as alternative package manager'"))
|
||||
.get_matches();
|
||||
|
||||
// Manage arguments
|
||||
// NOTICE: Do not add else statement to catch unexpecteds since this is handled by clap
|
||||
if matches.is_present("gui") {
|
||||
unimplemented!("GUI method is not yet implemented");
|
||||
} else if matches.is_present("dev") {
|
||||
// WARNING: Has to be implemented prior to implementing other features
|
||||
// FIXME-TEST: Make a test to ensure that features are not escaping sandbox
|
||||
// FIXME: Translate in rustlang from english
|
||||
fixme!("Create a new directory in tmpdir/name-of-project");
|
||||
//emkdir("$TEMPDIR/RXT0112");
|
||||
fixme!("Create sandboxed environment for testing of features");
|
||||
unimplemented!("Development method is not yet supported");
|
||||
}
|
||||
|
||||
// Manage subcommands
|
||||
// NOTICE: Do not add else statement to catch unexpecteds since this is handled by clap
|
||||
// FIXME: Convert this on 'for loop' looking for available subcommands to avoid hardcoding
|
||||
// FIXME-QA: Ugly?
|
||||
if let Some(_matches) = matches.subcommand_matches("resolve") {
|
||||
zernit::subcoms::resolve::rustlang::resolve::resolve();
|
||||
} else if let Some(_matches) = matches.subcommand_matches("list") {
|
||||
zernit::subcoms::list::rustlang::list::list();
|
||||
} else if let Some(_matches) = matches.subcommand_matches("deploy") {
|
||||
zernit::subcoms::deploy::rustlang::deploy::deploy();
|
||||
} else if let Some(_matches) = matches.subcommand_matches("hijack") {
|
||||
zernit::subcoms::hijack::rustlang::hijack::hijack();
|
||||
} else if let Some(_matches) = matches.subcommand_matches("remove") {
|
||||
zernit::subcoms::remove::rustlang::remove::remove();
|
||||
}
|
||||
|
||||
fixme!("Returns 0 even when no argument was parsed -> Expecting Exit 2 with help message");
|
||||
}
|
23
src/bin/main.sh
Normal file
23
src/bin/main.sh
Normal file
@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
|
||||
printf '%s\n' "ping"
|
||||
|
||||
# Simplified assertion
|
||||
die() {
|
||||
printf 'FATAL: %s\n' "$2"
|
||||
exit "$1"
|
||||
}
|
||||
|
||||
fixme() {
|
||||
[ -z "$IGNORE_FIXME" ] && printf 'FIXME: %s\n' "$1"
|
||||
}
|
||||
|
||||
# Argument management
|
||||
while [ $# -ge 1 ]; do case $1 in
|
||||
--help|-h|help)
|
||||
fixme "Help message here"
|
||||
shift 1
|
||||
;;
|
||||
*)
|
||||
die 2 "FIXME: Syntax error"
|
||||
esac; done
|
9
src/bin/main.v
Normal file
9
src/bin/main.v
Normal file
@ -0,0 +1,9 @@
|
||||
// DEVELOPMENT_HALTED: Vlang's tests does not support our file hierarchy (https://github.com/vlang/v/issues/3674)
|
||||
|
||||
fn hello() {
|
||||
printf("%s\n", "Hello World")
|
||||
}
|
||||
|
||||
fn main() {
|
||||
hello()
|
||||
}
|
37
src/lib.rs
Normal file
37
src/lib.rs
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
File used for sourcing of libraries
|
||||
*/
|
||||
|
||||
// Use modules
|
||||
mod modules {
|
||||
pub mod rustlang;
|
||||
}
|
||||
|
||||
// Use subcommands
|
||||
pub mod subcoms {
|
||||
pub mod resolve {
|
||||
pub mod rustlang {
|
||||
pub mod resolve;
|
||||
}
|
||||
}
|
||||
pub mod remove {
|
||||
pub mod rustlang {
|
||||
pub mod remove;
|
||||
}
|
||||
}
|
||||
pub mod deploy {
|
||||
pub mod rustlang {
|
||||
pub mod deploy;
|
||||
}
|
||||
}
|
||||
pub mod hijack {
|
||||
pub mod rustlang {
|
||||
pub mod hijack;
|
||||
}
|
||||
}
|
||||
pub mod list {
|
||||
pub mod rustlang {
|
||||
pub mod list;
|
||||
}
|
||||
}
|
||||
}
|
1
src/libs/rustlang/README.md
Normal file
1
src/libs/rustlang/README.md
Normal file
@ -0,0 +1 @@
|
||||
Directory for rustlang libraries (crates)
|
10
src/libs/rustlang/zernit-logger/Cargo.toml
Normal file
10
src/libs/rustlang/zernit-logger/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
||||
# FIXME-METADATA: Add metadata
|
||||
|
||||
[package]
|
||||
name = "zernit-logger"
|
||||
version = "0.0.0"
|
||||
authors = ["Kreyren <KostWarCZE@RiXotStudio.cz>"]
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
die = "0.2.0"
|
1
src/libs/rustlang/zernit-logger/README.md
Normal file
1
src/libs/rustlang/zernit-logger/README.md
Normal file
@ -0,0 +1 @@
|
||||
Custom logger designed for zernit project
|
53
src/libs/rustlang/zernit-logger/src/lib.rs
Normal file
53
src/libs/rustlang/zernit-logger/src/lib.rs
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
This is a library used for logging of software actions
|
||||
|
||||
FIXME-DOCS: Add description
|
||||
*/
|
||||
|
||||
// Macro to handle fixme messages
|
||||
// FIXME: Implement export in log directory based on system used
|
||||
// FIXME: Allow end-user to customize the message
|
||||
// FIXME: Allow end-user to mute the messages through configuration
|
||||
// FIXME: Contribute in log to outsource maintainance on them
|
||||
#[macro_export]
|
||||
macro_rules! fixme {
|
||||
($msg:expr) => ( println!("FIXME: {}", $msg);)
|
||||
}
|
||||
|
||||
// Macro to inform the end-user about non-fatal error
|
||||
// FIXME: Implement export in log directory based on system used
|
||||
// FIXME: Allow end-user to customize the message
|
||||
// FIXME: Contribute in log to outsource maintainance on them
|
||||
#[macro_export]
|
||||
macro_rules! error {
|
||||
($msg:expr) => ( println!("ERROR: {}", $msg);)
|
||||
}
|
||||
|
||||
// Macro to perform tracing
|
||||
// FIXME: Implement export in log directory based on system used and debug level
|
||||
// FIXME: Allow end-user to customize the message
|
||||
// FIXME: Contribute in log to outsource maintainance on them
|
||||
// FIXME: Output only if debug level 2 and higger is used
|
||||
#[macro_export]
|
||||
macro_rules! trace {
|
||||
($msg:expr) => ( println!("TRACE: {}", $msg);)
|
||||
}
|
||||
|
||||
// Macro to handle info messages
|
||||
// FIXME: Implement export in log directory based on system used
|
||||
// FIXME: Outsource parts of the code in log crate?
|
||||
// FIXME: Allow end-user to customize the message
|
||||
#[macro_export]
|
||||
macro_rules! info {
|
||||
($msg:expr) => ( println!("INFO: {}", $msg);)
|
||||
}
|
||||
|
||||
// Macro to overwrite default `unimplemented!();` to be more user-friendly
|
||||
// FIXME: Determine error code for unimplemented
|
||||
// FIXME: Cargo complains about us overwriting unimplemented()
|
||||
// #[macro_export]
|
||||
// macro_rules! unimplemented {
|
||||
// ($msg:expr) => (
|
||||
// die!(126; "UNIMPLEMENTED: {}", $msg);
|
||||
// )
|
||||
// }
|
1
src/modules/README.md
Normal file
1
src/modules/README.md
Normal file
@ -0,0 +1 @@
|
||||
This is non-standard file hierarchy used for code blocks that are used in binaries
|
43
src/modules/rustlang/emkdir.rs
Normal file
43
src/modules/rustlang/emkdir.rs
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
FIXME-DOCS: Documentation needed
|
||||
*/
|
||||
|
||||
// Sanitized method to make a new directory
|
||||
fn emkdir<PATH: AsRef<std::path::Path>>(pathname: PATH) {
|
||||
//unimplemented!("Mkdir needs implementation");
|
||||
// FIXME: Verify that parsed argument is valid
|
||||
// FIXME-TEST: Make sure that this works on Linux
|
||||
// FIXME-TEST: Make sure that this works on Windows
|
||||
// FIXME-TEST: Make sure that this works on Redox
|
||||
// FIXME-TEST: Make sure that this works on MacOS
|
||||
// FIXME-TEST: Make sure that this works on FreeBSD
|
||||
// FIXME: Implement permission management for new directory
|
||||
fixme!("die() doesn't accept pathname println-way, using some/path as stub");
|
||||
if !metadata(pathname.as_ref()).unwrap().is_dir() {
|
||||
match fs::create_dir(pathname.as_ref()) {
|
||||
Ok(..) => { trace!("Created a new directory in some/path"); },
|
||||
Err(ref error) if error.kind() == io::ErrorKind::AlreadyExists => {
|
||||
// For scenerio where pathname was parsed after sanity checks and prior to create_dir() call
|
||||
if metadata(pathname.as_ref()).unwrap().is_file() {
|
||||
die!(1; "Pathname some/path points to a file, created after sanity checks and prior to create_dir() call, suspecting malicous injection");
|
||||
} else if metadata(pathname.as_ref()).unwrap().is_dir() {
|
||||
die!(1; "Pathname some/path points to already existing directory, created after sanity checks and prior to create_dir() call suspecting malicious injection");
|
||||
} else if false { // FIXME: Check for symlink
|
||||
die!(1; "Pathname some/path points to already existing symlink, created after sanity checks and prior to create_dir() call, suspecting malicious injection");
|
||||
} else {
|
||||
die!(256; "Unexpected happend for creation of some/path after sanity checks and prior to create_dir() call");
|
||||
}
|
||||
},
|
||||
Err(error) => { die!(256; "Unexpected happend while creating a directory some/path"); }
|
||||
}
|
||||
} else if metadata(pathname.as_ref()).unwrap().is_dir() {
|
||||
trace!("Directory some/path already exists no need to create it");
|
||||
} else if metadata(pathname.as_ref()).unwrap().is_file() {
|
||||
// FIXME: die!(1; "Path {} is already a file which is unexpected", pathname);
|
||||
die!(1; "Path somepath is already a file which is unexpected");
|
||||
} else if false { // FIXME: Implement checking for symlink
|
||||
die!(1; "Path some/path is a symlink which is unexpected for creating a directory");
|
||||
} else {
|
||||
die!(256; "Unexpected happend while creating a new directory in some/path");
|
||||
}
|
||||
}
|
1
src/modules/rustlang/mod.rs
Normal file
1
src/modules/rustlang/mod.rs
Normal file
@ -0,0 +1 @@
|
||||
// Index modules here
|
3
src/subcoms/README.md
Normal file
3
src/subcoms/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
non-standard directory used for various subcommands used by zernit
|
||||
|
||||
These are modules being used as subcommands from which `main.rs` points to
|
19
src/subcoms/deploy/rustlang/deploy.rs
Normal file
19
src/subcoms/deploy/rustlang/deploy.rs
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
FIXME-DOCS: Add docs
|
||||
*/
|
||||
|
||||
use zernit_logger::fixme;
|
||||
|
||||
pub fn deploy() {
|
||||
// ABSTRACT: This is expected to be the installation method for the end-users to get OS with (WIP-NAME)
|
||||
fixme!("Deploy on target");
|
||||
fixme!("Deploy based on ENV variable -> ROOT='somepath' exports packages in somepath treating it as root");
|
||||
fixme!("Deploy based on config file");
|
||||
fixme!("Allow selection of file system hierarchy from CLI args");
|
||||
fixme!("Deploy kernel based on CLI args");
|
||||
fixme!("Deploy toolchain based on CLI args");
|
||||
fixme!("Deploy features");
|
||||
fixme!("Expected feature: Kreyrock (bedrock)");
|
||||
fixme!("Expected feature: winehq for unix");
|
||||
unimplemented!("Listing is not yet implemented");
|
||||
}
|
20
src/subcoms/hijack/rustlang/hijack.rs
Normal file
20
src/subcoms/hijack/rustlang/hijack.rs
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
FIXME-DOCS: Add docs
|
||||
*/
|
||||
|
||||
use zernit_logger::fixme;
|
||||
|
||||
pub fn hijack() {
|
||||
fixme!("Perform sanity-checks for hijacking");
|
||||
fixme!("Hijack apt");
|
||||
fixme!("Hijack pacman");
|
||||
fixme!("Hijack portage");
|
||||
fixme!("Hijack dnf");
|
||||
fixme!("Hijack zypper");
|
||||
fixme!("Hijack freebsd pckm");
|
||||
fixme!("Hijack MacOS");
|
||||
fixme!("Hijack Windows?");
|
||||
fixme!("Die if untested system is parsed");
|
||||
fixme!("Die if used on invalid directory (suggest deploy instead?)");
|
||||
unimplemented!("Hijacking is not yet supported");
|
||||
}
|
10
src/subcoms/list/rustlang/list.rs
Normal file
10
src/subcoms/list/rustlang/list.rs
Normal file
@ -0,0 +1,10 @@
|
||||
/*
|
||||
FIXME-DOCS: Add docs
|
||||
*/
|
||||
|
||||
use zernit_logger::fixme;
|
||||
|
||||
pub fn list() {
|
||||
fixme!("Output installed packages");
|
||||
unimplemented!("Listing is not yet implemented");
|
||||
}
|
10
src/subcoms/remove/rustlang/remove.rs
Normal file
10
src/subcoms/remove/rustlang/remove.rs
Normal file
@ -0,0 +1,10 @@
|
||||
/*
|
||||
FIXME-DOCS: Add docs
|
||||
*/
|
||||
|
||||
use zernit_logger::fixme;
|
||||
|
||||
pub fn remove() {
|
||||
fixme!("Remove package from specified root");
|
||||
unimplemented!("Removal of packages from specified root is not yet supported");
|
||||
}
|
6
src/subcoms/resolve/README.md
Normal file
6
src/subcoms/resolve/README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Zernit's resolver
|
||||
|
||||
This subcommand is expected to resolve various packages on the target system i.e if end-user wants to install wine then this subcommand is expected to handle it.
|
||||
|
||||
## Practical example
|
||||
user inputs `main resolve app-compat/wine` in cli -> various options -> Compile -> Install wine on the end-user system
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user