diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 0000000..c5eefb5
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -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
\ No newline at end of file
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
new file mode 100644
index 0000000..92156ad
--- /dev/null
+++ b/.github/CONTRIBUTING.md
@@ -0,0 +1,5 @@
+# Contributing guideliness
+
+FIXME: Preamble needed
+
+FIXME: Do not assign translate variables in fixme messages
\ No newline at end of file
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..9dc70b1
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -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
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..0e160b1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,33 @@
+---
+name: Bug report
+about: if Something is not working as expected
+title: 'bug:'
+labels: 'bug'
+assignees: '@Zernit/bugwranglers'
+---
+
+### Describe the bug
+
+
+text
+
+### To Reproduce
+
+
+1. ...
+2. ...
+
+### Expected behavior
+
+
+text
+
+### Additional context
+
+
+text
+
+### What do you expect to happend to solve this issue?
+
+
+text
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..2035089
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,10 @@
+# Disable blank issues
+blank_issues_enabled: false
+
+contact_links:
+ - name: IRC
+ url: https://webchat.freenode.net/#zernit
+ about: For simple questions and brainstorming
+ - name: Discord
+ url: https://discord.gg/5V4psY
+ about: Community maintained support in Zernit section
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..9d36953
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: For feature proposals
+title: 'REQUEST:'
+labels: 'feature-request'
+assignees: '@Zernit/bugwranglers'
+---
+
+### Describe the feature
+
+
+
+
+### Expected behavior
+
+
+
+
+### Additional context
+
diff --git a/.github/ISSUE_TEMPLATE/legal-request.md b/.github/ISSUE_TEMPLATE/legal-request.md
new file mode 100644
index 0000000..48756f9
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/legal-request.md
@@ -0,0 +1,8 @@
+---
+name: Legal request
+about: To propose changes in the license
+labels: 'license'
+assignees: '@Zernit/legal-team'
+---
+
+
diff --git a/.github/ISSUE_TEMPLATE/other.md b/.github/ISSUE_TEMPLATE/other.md
new file mode 100644
index 0000000..3d55bf8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/other.md
@@ -0,0 +1,9 @@
+---
+name: Other
+about: If none of the above fits your request
+labels: 'assign-me'
+assignees: '@Zernit/helpers'
+
+---
+
+
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
new file mode 100644
index 0000000..385e916
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question.md
@@ -0,0 +1,10 @@
+---
+name: Question
+about: In case you need upstream help
+title: 'Q:'
+labels: 'question'
+assignees: '@Zernit/helpers'
+
+---
+
+
diff --git a/.github/README.md b/.github/README.md
new file mode 100644
index 0000000..72dcb33
--- /dev/null
+++ b/.github/README.md
@@ -0,0 +1,16 @@
+**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.
+
+# Zernit (RXT0112)
+
+System manager of WIP_NAME designed to work cross-platform and using multiple programming languages depending on which one provides the most efficiency per required runtime.
+
+fixme: Change the URL based on the website used
+[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/RXT0112/RXT0112)
+
+fixme: Add prety button
+https://codesandbox.io/s/github/RXT0112/RXT0112
+
diff --git a/.github/custom-actions/sourcehub-layer/Dockerfile b/.github/custom-actions/sourcehub-layer/Dockerfile
new file mode 100644
index 0000000..fa0188a
--- /dev/null
+++ b/.github/custom-actions/sourcehub-layer/Dockerfile
@@ -0,0 +1,8 @@
+# Container image that runs your code
+FROM alpine:3.10
+
+# Copies your code file from your action repository to the filesystem path `/` of the container
+COPY entrypoint.sh /entrypoint.sh
+
+# Code file to execute when the docker container starts up (`entrypoint.sh`)
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/.github/custom-actions/sourcehub-layer/LICENSE b/.github/custom-actions/sourcehub-layer/LICENSE
new file mode 100644
index 0000000..de88db8
--- /dev/null
+++ b/.github/custom-actions/sourcehub-layer/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 GitHub Actions
+
+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.
diff --git a/.github/custom-actions/sourcehub-layer/README.md b/.github/custom-actions/sourcehub-layer/README.md
new file mode 100644
index 0000000..01cba30
--- /dev/null
+++ b/.github/custom-actions/sourcehub-layer/README.md
@@ -0,0 +1,23 @@
+# Hello world docker action
+
+This action prints "Hello World" to the log or "Hello" + the name of a person to greet. To learn how this action was built, see "[Creating a Docker container action](https://help.github.com/en/articles/creating-a-docker-container-action)" in the GitHub Help documentation.
+
+## Inputs
+
+### `who-to-greet`
+
+**Required** The name of the person to greet. Default `"World"`.
+
+## Outputs
+
+### `time`
+
+The time we greeted you.
+
+## Example usage
+
+```yaml
+uses: actions/hello-world-docker-action@master
+with:
+ who-to-greet: 'Mona the Octocat'
+```
diff --git a/.github/custom-actions/sourcehub-layer/action.yml b/.github/custom-actions/sourcehub-layer/action.yml
new file mode 100644
index 0000000..769ceb7
--- /dev/null
+++ b/.github/custom-actions/sourcehub-layer/action.yml
@@ -0,0 +1,17 @@
+# FIXME: Hook https://man.sr.ht/builds.sr.ht/api.md so that we can use sourcehub in GitHub action
+
+name: 'Hello World'
+description: 'Greet someone and record the time'
+inputs:
+ who-to-greet: # id of input
+ description: 'Who to greet'
+ required: true
+ default: 'World'
+outputs:
+ time: # id of output
+ description: 'The time we greeted you'
+runs:
+ using: 'docker'
+ image: 'Dockerfile'
+ args:
+ - ${{ inputs.who-to-greet }}
diff --git a/.github/custom-actions/sourcehub-layer/entrypoint.sh b/.github/custom-actions/sourcehub-layer/entrypoint.sh
new file mode 100755
index 0000000..e4cfd97
--- /dev/null
+++ b/.github/custom-actions/sourcehub-layer/entrypoint.sh
@@ -0,0 +1,5 @@
+#!/bin/sh -l
+
+echo "Hello $1"
+time=$(date)
+echo ::set-output name=time::$time
diff --git a/.github/label-pr.yml b/.github/label-pr.yml
new file mode 100644
index 0000000..371fb6b
--- /dev/null
+++ b/.github/label-pr.yml
@@ -0,0 +1,49 @@
+# 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/.*"
+ labels: ["license"]
+
+- regExp: ".*\\.md+$"
+ labels: ["markdown"]
+
+- regExp: "^(Cargo\\.toml|requirements\\.txt)$"
+ labels: ["dependencies"]
+
+# Repository specific
+- regExp: "^/docs/.*"
+ labels: ["docs"]
\ No newline at end of file
diff --git a/.github/labels.yml b/.github/labels.yml
new file mode 100644
index 0000000..b7345f9
--- /dev/null
+++ b/.github/labels.yml
@@ -0,0 +1,112 @@
+# This file handles labels on GitHub
+
+# 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"
+
+# MISC
+- name: bug
+ color: d73a4a
+ description: "Something isn't working"
+
+ - name: question
+ color: 7300ff
+ description: "For questions"
+
+- name: feature-request
+ color: 03fc5a
+ description: "Feature requests"
+
+- 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"
+
+# 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"
+
+- name: markdown
+ color: 454545
+ description: "Relevant to markdown"
diff --git a/.github/workflows.disabled/test.yml b/.github/workflows.disabled/test.yml
new file mode 100644
index 0000000..1dcb01a
--- /dev/null
+++ b/.github/workflows.disabled/test.yml
@@ -0,0 +1,9 @@
+on: [push]
+
+jobs:
+ hello_world_job:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Hello world action step
+ uses: ./.github/custom-actions/sourcehub-layer
\ No newline at end of file
diff --git a/.github/workflows/CPP.yml b/.github/workflows/CPP.yml
new file mode 100644
index 0000000..c6d5ca8
--- /dev/null
+++ b/.github/workflows/CPP.yml
@@ -0,0 +1,176 @@
+# Workflow for cpp
+name: cpp
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.cpp'
+
+jobs:
+ # Linting
+ lint-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Installing dependencies..
+ run: if ! apt list --installed | grep -qP ".*cppcheck.*"; then sudo apt install -y cppcheck; fi
+ - name: Linting..
+ run: cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.cpp$''); do cppcheck "$file"; done
+ # Kernel specific builds
+ build-macos-gcc-cpp:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-cpp
+ build-windows-gcc-cpp:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-cpp
+ build-macos-clang-cpp:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-cpp
+ build-windows-clang-cpp:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-cpp
+
+ # Docker builds
+ ## Debian - testing
+ build-gcc-cpp-debian:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://debian/testing:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-cpp
+ build-clang-cpp-debian:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://debian/testing:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-cpp
+ ## Fedora - latest
+ build-gcc-cpp-fedora:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://fedora/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-cpp
+ build-clang-cpp-fedora:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://fedora/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-cpp
+ ## Archlinux - latest
+ build-gcc-cpp-archlinux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://archlinux/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-cpp
+ build-clang-cpp-archlinux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://archlinux/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-cpp
+ ## Gentoo stage3-amd64
+ build-gcc-cpp-gentoo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://gentoo/stage3-amd64:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-cpp
+ build-clang-cpp-gentoo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://gentoo/stage3-amd64:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-cpp
+ ## Exherbo
+ build-gcc-cpp-exherbo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://exherbo/exherbo_ci:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-cpp
+ build-clang-cpp-exherbo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://exherbo/exherbo_ci:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-cpp
+
+ # Run tests
+ ## Exherbo (Linux representative)
+ check-exherbo-gcc-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - run: make check-gcc-cpp
+ check-exherbo-clang-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - run: make check-clang-cpp
+ ## Windows
+ check-windows-gcc-cpp:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-gcc-cpp
+ check-windows-clang-cpp:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-clang-cpp
+ ## Darwin
+ check-darwin-gcc-cpp:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-gcc-cpp
+ check-darwin-clang-cpp:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-clang-cpp
+
+ # Benchmarks
+ ## Exherbo
+ bench-exherbo-gcc-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - name: running benchmarks..
+ run: make bench-gcc-cpp
+ bench-exherbo-clang-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - name: running benchmarks..
+ run: make bench-clang-cpp
\ No newline at end of file
diff --git a/.github/workflows/Jekyll.yml b/.github/workflows/Jekyll.yml
new file mode 100644
index 0000000..4e9a787
--- /dev/null
+++ b/.github/workflows/Jekyll.yml
@@ -0,0 +1,22 @@
+# Workflow for CPP
+name: Jekyll
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - 'docs/**'
+
+jobs:
+ jekyll:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Get dependencies (FIXME-UPSTREAM)
+ run: sudo gem install jekyll
+
+ - name: Building..
+ # FIXME: Avoid using `cd`
+ run: cd docs && jekyll build
diff --git a/.github/workflows/Jekyll_publish.yml b/.github/workflows/Jekyll_publish.yml
new file mode 100644
index 0000000..4797f90
--- /dev/null
+++ b/.github/workflows/Jekyll_publish.yml
@@ -0,0 +1,31 @@
+# Workflow for CPP
+name: Jekyll Publish
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ push:
+ branches:
+ - master
+ - init-new
+ paths:
+ - 'docs/_posts/**'
+
+jobs:
+ jekyll:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Get dependencies (FIXME-UPSTREAM)
+ run: sudo gem install jekyll
+
+ - name: Building..
+ # FIXME: Avoid using `cd`
+ run: cd docs && jekyll build
+
+ - name: Deploying..
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_REPOSITORY: ${{ secrets.GITHUB_REPOSITORY }}
+ GITHUB_ACTOR: ${{ secrets.GITHUB_ACTOR }}
+ uses: BryanSchuetz/jekyll-deploy-gh-pages@master
diff --git a/.github/workflows/Vlang.yml b/.github/workflows/Vlang.yml
new file mode 100644
index 0000000..8b2a09f
--- /dev/null
+++ b/.github/workflows/Vlang.yml
@@ -0,0 +1,91 @@
+# Workflow for vlang
+name: vlang
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.v'
+
+jobs:
+ # Kernel specific builds
+ build-ubuntu-vlang:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install dependencies
+ run: |
+ if ! command -v v >/dev/null; then
+ wget https://github.com/vlang/v/releases/latest/download/v_linux.zip -O "$HOME/.cache/vlang.zip"
+ [ ! -d /opt/vlang ] && mkdir /opt/vlang
+ [ ! -d "$HOME/.cache/" ] && mkdir "$HOME/.cache/"
+ [ ! -f /opt/vlang/v ] && unzip "$HOME/.cache/vlang.zip" -d /opt/vlang/v
+ [ ! -x /usr/bin/v ] && ln -sf /usr/bin/v /opt/vlang/v
+ fi
+ - name: Building..
+ run: make build-vlang
+ build-darwin-vlang:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install dependencies
+ run: |
+ if ! command -v v >/dev/null; then
+ wget https://github.com/vlang/v/releases/latest/download/v_linux.zip -O "$HOME/.cache/vlang.zip"
+ [ ! -d /opt/vlang ] && mkdir /opt/vlang
+ [ ! -d "$HOME/.cache/" ] && mkdir "$HOME/.cache/"
+ [ ! -f /opt/vlang/v ] && unzip "$HOME/.cache/vlang.zip" -d /opt/vlang/v
+ [ ! -x /usr/bin/v ] && ln -sf /usr/bin/v /opt/vlang/v
+ fi
+ - name: Building..
+ run: make build-vlang
+ build-windows-vlang:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install dependencies
+ run: |
+ ECHO fixme
+ EXIT
+ - name: Building..
+ run: make build-vlang
+
+ # Docker builds
+ build-vlang-debian:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://debian/testing:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-vlang
+
+ build-vlang-fedora:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://fedora/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-vlang
+
+ # Run tests
+ check-vlang:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [macos-latest, windows-latest, ubuntu-18.04]
+ steps:
+ - uses: actions/checkout@v2
+ - name: running tests..
+ run: make check-vlang
+
+ # Benchmarks
+ bench-vlang:
+ 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-vlang
\ No newline at end of file
diff --git a/.github/workflows/bash.yml b/.github/workflows/bash.yml
new file mode 100644
index 0000000..d15ac9b
--- /dev/null
+++ b/.github/workflows/bash.yml
@@ -0,0 +1,67 @@
+name: Bash
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.bash'
+ - "tools/dockerfreeze"
+
+jobs:
+ # Linting
+ lint:
+ runs-on: ubuntu-latest
+ container: debian:stable
+ steps:
+ - name: Installing dependencies..
+ run: |
+ # Sync repos
+ # Check for git
+ if ! apt list --installed 2>/dev/null | grep -qP "^git\/stable.*"; then
+ # Check if we can install git
+ if ! apt list | grep -qP "^git\/stable.*"; then
+ apt update
+ elif apt list | grep -qP "^git\/stable.*"; then
+ true
+ else
+ exit 255
+ fi
+ # Install git
+ apt install -y git
+ elif apt list --installed 2>/dev/null | grep -qP "^git\/stable.*"; then
+ true
+ else
+ exit 255
+ fi
+ # Check for shellcheck
+ if ! apt list --installed 2>/dev/null | grep -qP "^shellcheck\s{1}-.*"; then
+ # Check if we can install shellcheck
+ if ! apt list | grep -qP "^shellcheck\s{1}-.*"; then
+ apt update
+ elif apt list | grep -qP "^shellcheck\s{1}-.*"; then
+ true
+ else
+ exit 255
+ fi
+ # Install shellcheck
+ apt install -y shellcheck
+ elif apt list --installed 2>/dev/null | grep -qP "^shellcheck\s{1}-.*"; then
+ true
+ else
+ exit 255
+ fi
+ - name: Pulling git dir..
+ uses: actions/checkout@v2
+ - name: Processing files..
+ # Make sure that bash is used
+ shell: bash
+ run: |
+ cd "$GITHUB_WORKSPACE"
+
+ # Process files
+ ## NOTICE: Do not use for loop to avoid pitfall https://mywiki.wooledge.org/BashPitfalls#pf1
+ git --git-dir="$GITHUB_WORKSPACE/.git" ls-files -z -- '*.bash' tools/dockerfreeze | while IFS= read -rd '' file; do
+ printf 'linting bash file %s\n' "$file"
+ shellcheck --external-sources --shell=bash "$file"
+ done
\ No newline at end of file
diff --git a/.github/workflows/clang.yml b/.github/workflows/clang.yml
new file mode 100644
index 0000000..2343a8a
--- /dev/null
+++ b/.github/workflows/clang.yml
@@ -0,0 +1,208 @@
+# Workflow for CPP
+name: C
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.c'
+
+jobs:
+ # Linting
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Installing dependencies..
+ run: if ! apt-list --installed cppcheck | grep -q ".*cppcheck.*"; then sudo apt install -y cppcheck; fi
+ - name: Linting..
+ run: cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.c$'); do cppcheck "$file"; done
+ ## Valgrind test on gcc
+ valgrind-gcc:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Installing dependencies..
+ run: if ! apt list --installed | grep -q ".*valgrind.*"; then sudo apt install -y valgrind; fi
+ - name: Linting..
+ run: |
+ make build-gcc-c
+ # NOTICE: This requires to input the arguments invidually
+ # FIXME: Use regex to gather arguments
+ valgrind --leak-check=full -v build/build-gcc-c/zernit-gcc-c -h -unexpected
+ ## Valgrind on clang
+ valgrind-clang:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Installing dependencies..
+ run: if ! apt list --installed | grep -qP ".*valgrind.*"; then sudo apt install -y valgrind; fi
+ - name: Linting..
+ run: |
+ make build-clang-c
+ # NOTICE: This requires to input the arguments invidually
+ # FIXME: Use regex to gather arguments
+ valgrind --leak-check=full -v build/build-clang-c/zernit-clang-c -h -unexpected
+ # Kernel specific builds
+ build-macos-gcc-c:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-c
+ build-windows-gcc-c:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-c
+ build-macos-clang-c:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Building..
+ run: make build-clang-c
+ build-windows-clang-c:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Downloading dependencies..
+ run: Invoke-WebRequest -OutFile LLVM-3.7.0-win64.exe https://releases.llvm.org/3.7.0/LLVM-3.7.0-win64.exe
+ - name: Install dependencies..
+ run: |
+ echo FIXME_INSTALL_CLANG
+ EXIT
+ - name: Building..
+ run: make build-clang-c
+
+ # Docker builds
+ ## Debian - testing
+ build-gcc-c-debian:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://debian/testing:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-c
+ build-clang-c-debian:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://debian/testing:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-c
+ ## Fedora - latest
+ build-gcc-c-fedora:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://fedora/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-c
+ build-clang-c-fedora:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://fedora/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-c
+ ## Archlinux - latest
+ build-gcc-c-archlinux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://archlinux/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-c
+ build-clang-c-archlinux:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://archlinux/latest:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-c
+ ## Gentoo stage3-amd64
+ build-gcc-c-gentoo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://gentoo/stage3-amd64:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-c
+ build-clang-c-gentoo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://gentoo/stage3-amd64:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-c
+ ## Exherbo
+ build-gcc-c-exherbo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://exherbo/exherbo_ci:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-gcc-c
+ build-clang-c-exherbo:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: docker://exherbo/exherbo_ci:latest
+ - uses: actions/checkout@v2
+ - name: building..
+ run: make build-clang-c
+
+ # Run tests
+ ## Exherbo (Linux representative)
+ check-exherbo-gcc-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - run: make check-gcc-c
+ check-exherbo-clang-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - run: make check-clang-c
+ ## Windows
+ check-windows-gcc-cpp:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-gcc-c
+ check-windows-clang-cpp:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-clang-c
+ ## Darwin
+ check-darwin-gcc-cpp:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-gcc-c
+ check-darwin-clang-cpp:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: make check-clang-c
+
+ # Benchmarks
+ ## Exherbo
+ bench-exherbo-gcc-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - name: running benchmarks..
+ run: make bench-gcc-cpp
+ bench-exherbo-clang-cpp:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://exherbo/exherbo_ci:latest
+ - name: running benchmarks..
+ run: make bench-clang-cpp
\ No newline at end of file
diff --git a/.github/workflows/dockerfile.yml b/.github/workflows/dockerfile.yml
new file mode 100644
index 0000000..d4a22e7
--- /dev/null
+++ b/.github/workflows/dockerfile.yml
@@ -0,0 +1,30 @@
+name: Dockerfile
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.Dockerfile'
+
+jobs:
+ # Linting
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Installing dependencies..
+ run: |
+ # Fix untill hadolint it available by downstream
+ if ! apt-cache search hadolint | grep -qP "^hadolint -"; then
+ # Install hadolint if not already installed through apt
+ if ! apt list --installed | grep -qP "^hadolint -"; then
+ if ! apt-cache search hadolint | grep -qP "^hadolint -.*"; then { if command -v wget >/dev/null; then apt install -y wget; fi ;} && wget https://github.com/hadolint/hadolint/releases/download/v1.17.5/hadolint-Linux-x86_64 -O /usr/bin/hadolint && { [ ! -x hadolint ] && chmod +x /usr/bin/hadolint ;}; elif apt-cache search hadolint | grep -qP "^hadolint -.*"; then apt install -y hadolint; fi
+ fi
+ fi
+ - name: Linting..
+ run: |
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.Dockerfile$'); do
+ printf 'checking dockerfile %s using hadolint\n' "$file"
+ hadolint "$file"
+ done
\ No newline at end of file
diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml
new file mode 100644
index 0000000..0cd985f
--- /dev/null
+++ b/.github/workflows/greetings.yml
@@ -0,0 +1,13 @@
+name: ConaIsa
+
+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'
diff --git a/.github/workflows/label-maker.yml b/.github/workflows/label-maker.yml
new file mode 100644
index 0000000..daa0d4f
--- /dev/null
+++ b/.github/workflows/label-maker.yml
@@ -0,0 +1,23 @@
+name: ConaIsa
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '*.labels\.yml$'
+
+jobs:
+ labeler:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Assigning labels
+ 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 }}
\ No newline at end of file
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
new file mode 100644
index 0000000..a2faa24
--- /dev/null
+++ b/.github/workflows/labeler.yml
@@ -0,0 +1,19 @@
+# Workflow to associate labels automatically
+name: Label management
+
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+
+jobs:
+ label:
+ runs-on: ubuntu-latest
+ 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
\ No newline at end of file
diff --git a/.github/workflows/markdown.yml b/.github/workflows/markdown.yml
new file mode 100644
index 0000000..eee009b
--- /dev/null
+++ b/.github/workflows/markdown.yml
@@ -0,0 +1,23 @@
+name: Markdown
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.md'
+
+jobs:
+ # Linting
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Installing dependencies..
+ run: if ! command -v markdownlint; then sudo npm install -g markdownlint-cli; fi
+ - name: Linting..
+ run: |
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.md$'); do
+ printf 'linting markdown file %s' "$file"
+ markdownlint "$file" --ignore node_modules
+ done
\ No newline at end of file
diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
new file mode 100644
index 0000000..54d97df
--- /dev/null
+++ b/.github/workflows/python.yml
@@ -0,0 +1,391 @@
+# Workflow for python
+name: Python
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.py'
+ - 'requirements.txt'
+
+jobs:
+ # Linting 3.5
+ lint-linux-python-3_5:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.5
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-macos-python-3_5:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.5
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-windows-python-3_5:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.5
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ security-check-python-3_5:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.5
+ - name: Installing python dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install -r requirements.txt
+ - name: Installing linting dependencies
+ run: |
+ if apt list --installed | grep -qP "^bandit -"; then sudo apt install -y bandit; fi
+ - name: Linting..
+ run: |
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do
+ printf 'checking python file %s for security issues\n' "$file"
+ bandit "$file"
+ done
+
+ # Linting 3.6
+ lint-linux-python-3_6:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.6
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-macos-python-3_6:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.6
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-window-python-3_6:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.6
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ security-check-python-3_6:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.6
+ - name: Installing python dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install -r requirements.txt
+ - name: Installing linting dependencies
+ run: |
+ if apt list --installed | grep -qP "^bandit -"; then sudo apt install -y bandit; fi
+ - name: Linting..
+ run: |
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do
+ printf 'checking python file %s for security issues\n' "$file"
+ bandit "$file"
+ done
+
+ # Linting 3.7
+ lint-linux-python-3_7:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.7
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-macos-python-3_7:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.7
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-windows-python-3_7:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.7
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ security-check-python-3_7:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.7
+ - name: Installing python dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install -r requirements.txt
+ - name: Installing linting dependencies
+ run: |
+ if apt list --installed | grep -qP "^bandit -"; then sudo apt install -y bandit; fi
+ - name: Linting..
+ run: |
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do
+ printf 'checking python file %s for security issues\n' "$file"
+ bandit "$file"
+ done
+
+ # Linting 3.8
+ lint-linux-python-3_8:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.8
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-macos-python-3_8:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.8
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ lint-windows-python-3_8:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.8
+ - 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 pytest
+ run: |
+ pip install pytest
+ # FIXME: False triggers on files which names continues after set extension
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do pytest "$file"; done
+ security-check-python-3_8:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Configuring backend..
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.8
+ - name: Installing python dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install -r requirements.txt
+ - name: Installing linting dependencies
+ run: |
+ if apt list --installed | grep -qP "^bandit -"; then sudo apt install -y bandit; fi
+ - name: Linting..
+ run: |
+ cd "$GITHUB_WORKSPACE" && for file in $(git ls-tree --name-only -r ${{ github.sha }} | grep '\.py$'); do
+ printf 'checking python file %s for security issues\n' "$file"
+ bandit "$file"
+ done
\ No newline at end of file
diff --git a/.github/workflows/rustlang.yml b/.github/workflows/rustlang.yml
new file mode 100644
index 0000000..cf6a619
--- /dev/null
+++ b/.github/workflows/rustlang.yml
@@ -0,0 +1,84 @@
+# Workflow for Rustlang
+name: Rustlang
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.rs'
+ - Cargo.toml
+
+jobs:
+ # Kernel specific builds
+ ubuntu-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Building..
+ run: cargo build
+ macos-build:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Building..
+ run: cargo build
+ windows-build:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Building..
+ run: cargo build
+
+ # Docker builds
+ debian-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://debian:testing
+ - name: Building..
+ run: cargo build
+ fedora-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://fedora:latest
+ - name: Building..
+ run: cargo build
+ fedora-next-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://fedora:rawhide
+ - name: Building..
+ run: cargo build
+ archlinux-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://archlinux:latest
+ - name: Building..
+ run: cargo build
+ gentoo-build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: docker://gentoo/stage3-amd64:latest
+ - name: Building..
+ run: cargo build
+
+ # Run tests
+ check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Testing..
+ run: cargo test
+
+ # Benchmarks
+ bench:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Benchmarking..
+ run: cargo bench
\ No newline at end of file
diff --git a/.github/workflows/shell.yml b/.github/workflows/shell.yml
new file mode 100644
index 0000000..d08a13b
--- /dev/null
+++ b/.github/workflows/shell.yml
@@ -0,0 +1,66 @@
+name: Shell
+
+# Relevant to events - https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows
+on:
+ pull_request:
+ types: [synchronize, opened, reopened, ready_for_review]
+ paths:
+ - '**.sh'
+
+jobs:
+ # Linting
+ lint:
+ runs-on: ubuntu-latest
+ container: debian:stable
+ steps:
+ - name: Installing dependencies..
+ run: |
+ # Sync repos
+ # Check for git
+ if ! apt list --installed 2>/dev/null | grep -qP "^git\/stable.*"; then
+ # Check if we can install git
+ if ! apt list | grep -qP "^git\/stable.*"; then
+ apt update
+ elif apt list | grep -qP "^git\/stable.*"; then
+ true
+ else
+ exit 255
+ fi
+ # Install git
+ apt install -y git
+ elif apt list --installed 2>/dev/null | grep -qP "^git\/stable.*"; then
+ true
+ else
+ exit 255
+ fi
+ # Check for shellcheck
+ if ! apt list --installed 2>/dev/null | grep -qP "^shellcheck\s{1}-.*"; then
+ # Check if we can install shellcheck
+ if ! apt list | grep -qP "^shellcheck\s{1}-.*"; then
+ apt update
+ elif apt list | grep -qP "^shellcheck\s{1}-.*"; then
+ true
+ else
+ exit 255
+ fi
+ # Install shellcheck
+ apt install -y shellcheck
+ elif apt list --installed 2>/dev/null | grep -qP "^shellcheck\s{1}-.*"; then
+ true
+ else
+ exit 255
+ fi
+ - name: Pulling git dir..
+ uses: actions/checkout@v2
+ - name: Processing files..
+ # Make sure that bash is used
+ shell: bash
+ run: |
+ cd "$GITHUB_WORKSPACE"
+
+ # Process files
+ ## NOTICE: Do not use for loop to avoid pitfall https://mywiki.wooledge.org/BashPitfalls#pf1
+ git --git-dir="$GITHUB_WORKSPACE/.git" ls-files -z -- '*.sh' | while IFS= read -rd '' file; do
+ printf 'linting shell file %s\n' "$file"
+ shellcheck --external-sources --shell=sh "$file"
+ done
\ No newline at end of file
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
new file mode 100644
index 0000000..1446c9a
--- /dev/null
+++ b/.github/workflows/stale.yml
@@ -0,0 +1,17 @@
+name: Staler
+
+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'
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..15f9149
--- /dev/null
+++ b/.gitignore
@@ -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*
\ No newline at end of file
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 0000000..db1dc1c
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,33 @@
+image:
+ file: gitpod/debian.Dockerfile
+
+
+# FIXME: Change gitpod user on GITPOD_GIT_USER_NAME env value
+tasks:
+ # Does not accept Quotation without '|' ?
+ - init: |
+ printf 'FIXME: %s\n' "Get rid of me"
+ command: |
+ printf 'FIXME: %s\n' "This is a hotfix for https://github.com/gitpod-io/gitpod/issues/1252 manipulating PS1 env var"
+ # FIXME: The color of second line does not transfer to the environment unless Ctrl+C is pressed
+ export PS1="\033[1m\e[38;5;201m[ \t : \w : EXIT \$? ]\033[0m\e[38;5;011m\n\u@gitpod \\$ \[$(tput sgr0)\]"
+ # ^^^^^^^ - bolt
+ # ^^^^^^^^^^^^ - Purple color
+ # ^^^^^^ - remove bolt
+ # ^^^^^^^^^^^ - Gold color
+ clear
+
+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==
+ - krosf.vscode-valgrind@0.0.1:YTn5lOY8OnPKJYDqJPr/Sg==
+ - matklad.rust-analyzer@0.1.20200217:zozmBmOg1N91pRISIsYXBg==
+ - exiasr.hadolint@0.3.0:/FkAW3eTb+z9O7VZAyAa0w==
+ - DavidAnson.vscode-markdownlint@0.34.0:l4DL7iPpo7DdhfUHIUtcuQ==
+ - yzhang.markdown-all-in-one@2.7.0:5+DmuGcePw8L9PtfgOAAHg==
\ No newline at end of file
diff --git a/.hadolint.yaml b/.hadolint.yaml
new file mode 100644
index 0000000..35e92e0
--- /dev/null
+++ b/.hadolint.yaml
@@ -0,0 +1,12 @@
+ignored:
+ - DL3007 # Usage of latest version is expected
+ - DL3008 # Pinning specific version on apt is not sane
+ - DL3015 # We don't mind recommended packages
+ - DL4001 # Allow usage of curl and wget
+ - DL4006 # False-trigger on /bin/sh usage?
+
+trustedRegistries:
+ - docker.io
+ - debian
+ - gitpod
+ - hadolint
\ No newline at end of file
diff --git a/.markdownlint.json b/.markdownlint.json
new file mode 100644
index 0000000..1fd1b51
--- /dev/null
+++ b/.markdownlint.json
@@ -0,0 +1,8 @@
+// FIXME-LINT(18032020): Outputs invalid errors in gitpod
+
+{
+ // We do not need newlines on EOF
+ "single-trailing-newline": false,
+ // We don't care fore line lenght due to the softwrap
+ "line-length": false
+}
\ No newline at end of file
diff --git a/.theia/README.md b/.theia/README.md
new file mode 100644
index 0000000..3361ffd
--- /dev/null
+++ b/.theia/README.md
@@ -0,0 +1,3 @@
+Configuration directory for [theia](https://github.com/eclipse-theia/theia)
+
+Theia is also used by gitpod
\ No newline at end of file
diff --git a/.theia/settings.json b/.theia/settings.json
new file mode 100644
index 0000000..5b902c0
--- /dev/null
+++ b/.theia/settings.json
@@ -0,0 +1,19 @@
+{
+ "editor.wordWrap": "on",
+ // To show invisibles
+ "editor.renderWhitespace": "all",
+ "editor.tabSize": 2,
+ "editor.tabCompletion": "on",
+ "setup.dontask": true,
+ // rustlang
+ "crates.upToDateDecorator": "",
+ "rust.wait_to_build": 0,
+ // FIXME: Expand nproc command here
+ // NOTICE: Gitpod is currently (130220) limited on 8 threads
+ // FIXME: We are unable to shot datatype helpers (https://github.com/gitpod-io/gitpod/issues/1200)
+ "rust.jobs": 8,
+ "rust.build_on_save": true,
+ "rust.target_dir": "build/rustlang",
+ "rust-analyzer.displayInlayHints": true,
+ "rust-analyzer.highlightingOn": true,
+}
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..5efb31b
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,247 @@
+# Copyright 2019 Jacob Hrbek
+# Distributed under the terms of the GNU General Public License v3 (https://www.gnu.org/licenses/gpl-3.0.en.html) or later
+# FIXME-LINT(18032020): Outputs wrong highlights in gitpod
+# 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 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
\ No newline at end of file
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..933f7b7
--- /dev/null
+++ b/Cargo.toml
@@ -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 "]
+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.28.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
\ No newline at end of file
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..7c4e324
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,3 @@
+This project's license is located in the LICENSE directory, please refer there for more informations.
+
+License is transleted through crowdsourcing where file with name EN-LICENSE is the original license.
\ No newline at end of file
diff --git a/LICENSE/EN-LICENSE.md b/LICENSE/EN-LICENSE.md
new file mode 100644
index 0000000..7ff5d43
--- /dev/null
+++ b/LICENSE/EN-LICENSE.md
@@ -0,0 +1,200 @@
+
+
+# RXT ZERNIT LICENSE (RXT0112-LICENSE)
+
+
+Version 16032020053025CET, 20 January 2020
+
+
+Copyright (C) 2019-2020 [Jacob Hrbek](mailto:kreyren@rixotstudio.cz)
+
+Redistribution of this license is not allowed unless explicitly stated in the license itself assuming provided conditions met.
+
+FIXME: This license needs method to handle indexing where A. -> 1A. -> 1. indexing is preffered
+
+
+
Preamble
+
+FIXME: Configure Markdown-lint to allow bare urls here
+
+This license is made to protect the intellectual property and direct workflow of project codenamed as **RXT0112** also known as **Zernit** publicly represented on hyperlink https://github.com/RXT0112/Zernit and understood as original repository 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 with the intention to avoid segmentation while providing sustainable business plan to provide open-source software for everyone.
+
+License is designed to be community maintained where only the authorized personel further identified in this file are permitted to make changes in the original repository in which this license has been created.
+These authorized personel can be also clarified in file located in `.github/CODEOWNERS` with syntax explanation on hyperlink https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners to appropriate GitHub Team or personal to allow making changes in this file which has to be archived using `git` which is version-control system for tracking changes in source code further explained by it's maintainers on hyperlink https://git-scm.com/.
+
+This file is written in markdown syntax further explained on hyperlink https://en.wikipedia.org/wiki/Markdown.
+
+## 0. TERMINOLOGY
+
+This section is dedicated to provide explanation of used terms in this file.
+
+You are encouraged to contribute in case required explanation of used terms is missing or is not sufficient.
+
+### A. Comments
+
+Comments are a feature in markdown syntax that do not render the appropriate section specified by this syntax on the final version and is not meant to be a part of final version due it's usage for development of this license.
+
+To elaborate further every comment is prefixed with `` which can be applied through multiple lines.
+
+Example of comments:
+
+
+
+Notice that said example is not rendered in the final version.
+
+#### I. FIXME comments
+
+FIXME comments are lines in this documment prefixed with `FIXME:` which are also considered as not part of the final form of this document due to it's usage to direct development of this license.
+
+Example of FIXME comment:
+
+FIXME: Hello, i'm example of FIXME comment
+
+### B. Source code
+
+Source code is a collection of text recognized by compiler that are used to perform specified action in the hardware itself.
+
+### Repositories
+
+Repositories are a method to provide source code for public which are in our case provided on GitHub presented under hyperlink https://www.github.com/RXT0112/Zernit as of 16.02.2020.
+
+### Upstream
+
+Upstream is original creator of said directory or files used on this project not to be confused with original creator who is understood to be upstrem for this project.
+
+### Paths
+
+Unless it is not obvious paths are representing physicall files or directories in this repository for example:
+
+path `src/bin/main.rs` points to file located in repository use
+
+### Original Creator (or 'OC' for short)
+
+Original Creator of this repository is `Jacob Hrbek `.
+
+FIXME: Limit my power as you see appropriate, this is done to avoid unexpected abuse of the license in early development which could have kill the project. - Kreyren
+
+OC reserves absolute right for whole repository to decide hierarchy of parties associated in this repository, change of read and write access and revoking of the license for any party with or without provided reason.
+
+### Repository Managers
+
+Repository Managers are defined as service with the ability to provide our project for the general public in on-line form.
+
+### Merge Request
+
+Also wrongly named as 'Pull Requst' by many repository managers 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, Inc.) explanation.
+
+In short this is merge request which is being worked on before it can be submitted for review and considered for merge in target repository.
+
+### Forks
+
+Forks are repository manager's features that allows anyone to make a copy of a repository in their specified profile.
+
+## CONDITIONS
+
+### Conflicts with local laws
+
+This license explicitly does not allow any use of RXT0112's intellectual property in a scenario where license implementation conflicts with local laws in the area of use of said intellectual property.
+
+For the license to grant expected permission you are required to inform the project about said conflicts with proper references and/or submit a merge request with required improvements to allow these expected permissions.
+
+### Your agreenment
+
+You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify, use or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by using, modifying or distributing the intellectual property of project RXT0112 (or any work based on the Program), you indicate your acceptance of this License to do so, and in all of its terms and conditions.
+
+### Nimmy condition
+
+
+The forked repositories are not allowed to be renamed on "Nimmy".
+
+### Source code handling
+
+You are expected to keep the source-code open and accesible to all contributors, maintainers and general public. We do not grant you the permission to make the source code private.
+
+### 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 revoke license of those who violate this condition to the extent permitted by the law with the intention to avoid segmentation.
+- If the difference between original repository and standalone fork is a feature which is not beneficial to the original repository decided by OC then the standalone fork is allowed for the period of which this still meets this requirement.
+
+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:
+
+```none
+Created by Jon Doe 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.
+
+All affiliated parties that changed content provided in original repository are required to place following signature in their commit messages to prove that they agree with terms provided in said license and the terms in following versions which they have the right to influence.
+
+```none
+Signed-off-by: Jon Doe
+```
+
+### Methods used to maintain this license
+
+This license is based on rolling release development which means that version is made by using following syntax HHMMSSDDMMYY which represents the day on which the license has been updated where the most recent version always replaces the previous version.
+
+Example of syntax used for versioning:
+
+**18061016022020** meaning **16th February of the year 2020 at 18 hours, 6 minutes and 10 seconds**
+
+## Your permission
+
+These permissions are granted as part of our ongoing effort to comply with Free Software Foundation's philosophy, it's as of 17/02/20 is not perfect based on majority of FSF members discussed in https://forum.members.fsf.org/t/help-me-with-gpl-3-inspired-license-designed-for-commercial-use-and-to-avoid-segmentation/1953/59 and we encourage contribution and challenges if you have a better solution since it's in our best interest to provide best possible environment for further development and end-user satisfaction.
+
+### Use of intellectual property for personal use
+
+Assuming that conditions in this license are not breached then you are allowed to use intellectual property of project RXT0112 for personal use unless stated otherwise by other license which use is specified in contributing condition.
+
+### Permission to modify the intellectual property
+
+You are allowed to perform any changes to the intellectual property that does not include features that are suitable for original repository.
+
+You have the right to modify and/or maintain specific section of a project in original repository with official support and guidance from the project for free as long as your contribution passes code quality checks (excluding false trigger caused by a bug) and review from other contributors.
+
+You have the right to use your contribution outside of original repository if maintainers of original repository does not allow for the feature to be implemented.
+
+### Distribution of malware
+
+We do not grant you a permission to distribute our intellectual property with a malicious code that is directly and/or indirectly made to harm the end-user which includes handling of end-user's data without explicit permission by the end-user.
+
+### Usage by whitehat hackers
+
+You have the right to use intellectual property with the intention to fix security issues in our project and other systems as long as your work does not directly harm our project.
+
+White hat hackers are also welcomed by the project and their work is highly appreciated.
+
+### Usage in weapons
+
+We do not grant you a permission to use our intellectual property as a part of a mechanism that is designed to cause a harm to a living organism.
+
+## Warranty
+
+This program is provided without any warranty unless required by law in which case the party which requires said implementation of law in this license is required to inform the project for said laws to be implemented in this license so that the the program can be used legally in their area as stated in conditions above.
+
+Warranty can also be specified based on invidual contract or agreenment with party that requires it.
+
+## Additional notices
+
+The license has following syntax `Version 18022020173356, 20 January 2020` where the 20th January 2020 is the date where the license has been created.
\ No newline at end of file
diff --git a/LICENSE/README.md b/LICENSE/README.md
new file mode 100644
index 0000000..b0f4446
--- /dev/null
+++ b/LICENSE/README.md
@@ -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.
\ No newline at end of file
diff --git a/LICENSE/license-abstract.md b/LICENSE/license-abstract.md
new file mode 100644
index 0000000..c809bc9
--- /dev/null
+++ b/LICENSE/license-abstract.md
@@ -0,0 +1,102 @@
+The licensing has been discussed in FSF which is due to the activity and info provided getting out of hand for me to process all the informations and resolve duplicate questions thus this file has been created hopefully being usable for the project in the future.
+
+# What is this?
+Summary: This is project codenamed as RXT0112 with assigned name Zernit currently hosted on https://github.com/RXT0112/Zernit which is expected to be system/package-manager that is expected to supports any downstream on any kernel with custom dowsntream method.
+
+Project supports all programming languages and it's file hiearchy has been adapted for this workflow
+- currently with issues in cargo (rustlang crate manager and compiler) and vlang that are currently in works.
+
+Project currently has 248 checks that trigger based on files changed designed to ensure code quality with option to make custom solution where needed.
+
+Developed with optional GUI to allow software modding (i.e game modding using GUI)
+- Due to the usage of games it is designed to allow proprietary software with option to help developers to convert their code on open-source where it would make sense.
+
+Project requires redistribution of downstream so that end-user would be able to download the instructions
+- Using mirrors of official downstream
+- Using P2P of official and unofficial instructions (using blockchain-like structure so that end-user would be able to download the required instructions without limitations on our end)
+- Allows 3rd party sources so that everyone can make their own packages, mods, etc..
+
+Project is planned to have mentoring program for end-users/contributors for free to learn programming language and how to contribute/use the software properly
+- Mentoring program will have IRC to Discord to Matrix.org to zulip bridge set up in case end-user requires help through chat
+- Forum is expected to be set up for complicated issues only
+- Documentation is hosted using jekyll which will be referenced during support in case it mensions the solution with additional support in case the content is not fully understood.
+ - If the content is not fully understood or documentation is missing required info the supportee will be encouraged to make a contribution (inspired by archlinux/gentoo)
+
+Project expects stable economy that would allow bug bounties and optional method to pay contributors for their productivity.
+
+Original creator plans on making OSS hardware which is expected to be covered by this project as well.
+
+Business plan that would allow for a stable profit is preferred.
+
+This project is designed to be compatible with four freedoms mensioned on https://www.gnu.org/philosophy/free-sw.en.html
+
+## Issues
+
+### Mentoring program
+Inspired by exherbo.org approach this project does not expect help-vampires that expects babysitting that would cost the project it's resources
+- End-users that are willing to learn and are asking relevant informations are always welcomed and for these we designed this program
+- Mentoring program is expected to be for free to avoid placing a paywall on end-user's competence and to avoid mentors rushing through with the education to maximalize their profit while sacrificing the end-user's education.
+- Original creator has community of students that are already following this ideology of free education and are expected to perform as mentors on this project.
+
+Based on my understanding and info provided by exherbo and my experience with them i believe that exherbo has implemented what i would call “filtering mechanism” which makes the distro not usable or pain to use for users (confusing the end-user with wrong info, banning end-users, etc… ) and keeps only contributors and developers capable of maintaining it.
+Since to use the distro you need an access to repositories and know how to make the downstream in case you encounter blocking bug (which happens a lot) and the initial installation using tarball seems to be made to make the initial compilation painful to do due to the blocks, banned features without which the package manager won’t resolve the packages and requires configuration of /etc/paludis which may take hours-weeks to do without proper documentation and guidance.
+For example there were few users enraged by this that they made https://web.archive.org/web/20190302155000/https://exherbo.com/ and pages purposely spreading false informations about the creator one of which is still up https://bryanostergaard.com/ (the creator is friendly and nice guy don’t believe the info provided on mensioned websites).
+Which is what inspired this approach, but i want to make it more user-friendly to avoid confused users that are just not willing to learn how to use the software properly that would otherwise cause a segmentation of them making weird forks that has code quality issues and breaks the software in a way that fixes their issue by breaking other X functions.
+
+### Segmentation
+Referencing ripple project on https://github.com/osuripple/lets/pull/5 this project is expected to have a method to avoid segmentation of the project to comply with four freedoms it has been developed as such:
+- Standalone forks are not allowed unless upstream prevents a feature to be implemented.
+- Contribution forks are welcomed assuming that contributor makes a draft merge request to the original repository for the porpose of code-quality and direct upstream support
+- Competent and trusted contributors will be able to get write access to relevant files, but reviews will be encouraged even with this access.
+
+### Redistribution
+Malware in distributed files is a concern
+- Digital distribution is expected to be handled by upstream
+- There is expected to be set of rules maintained by upstream and community to ensure that the digital distribution is safe to use
+ - Project will issue a warning to third party if these rules are not met and do it's best to help with compliance with these rules
+ - If third party does not comply with these rules even after it has been warned the project will take legal action.
+- Digital distribution will always have checksums
+ - in case upstream gets compromised
+ - in case repository hoster gets compromised
+ - in case end-user downloads corrupted file
+- Physicall distribution is expected to be handled by upstream and authorised parties
+ - There is expected to be set of rules maintaned by upstream and community to ensure safety of these physicall copies
+ - From business point of view upstream expects cut from profit
+ - Will be bundled with checksum hosted on remote in case the physical device gets corrupted or mishandled
+Project is rolling release with version control
+- Physical distribution of rolling releases is not allowed to avoid unsable software distribution and outdated software.
+
+### Profit
+Project is expected to have stable economy to sustain bug bounties, it's activity and ideally improve wealth of original creator.
+- Project is expected to be paid for commercial use
+- Project considers paid license for non-contributing members assuming it being implemented in a way that would motivate end-users from being help-vampires without sacrificing four freedoms
+- Support provided by the project is expected to be always free.
+ - It was discussed that offering priority based on end-user's support of the project could be prioritized
+ - i.e person who donates with money have priority over regular person and person who actively contributes in the source code would have priority over those who donate (possible to reduce help-vampires)
+- Project accepts donations
+- Project accepts sponsorships
+- Project is designed to be for sale for X amount of time inspired by OpenSUSE's approach where original creator would stay in charge to avoid new owner from changing it's components.
+- In general more funds without sacrificing four freedoms the better.
+
+## Solutions
+
+### Code-quality
+Currently project has around 248 tests set up with expectation on 811 that are going to trigger based on files edited to help with project maintainance.
+
+Project has set up hierarchy for reviewers that are expected to review merge requests before being merged (sourced from original creator's community for a kick-start)
+
+mensioned mentoring project and method to handle contribution forks
+
+### Other plans
+
+#### Free hosting
+Project is expected to provide free hosting as a part of mentoring program and to support new developers. (requires funds to handle the server cost)
+- VPN hosting not allowed
+- Cryptocurrency mining not allowed
+- Setting up a rendering farm not allowed
+
+#### OSS hardware development
+Project's business plan is expected to handle OSS hardware development
+- Currently Portable device (https://github.com/kreyware/RXT0117) and aircraft (https://github.com/kreycraft0) assuming cooperation with EAA (https://www.eaa.org/eaa) in the works.
+
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..6a4ea53
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,132 @@
+# 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
+
+build: build-rustlang build-clang-c build-gcc-c build-gcc-ccp build-clang build-brainfuck build-python build-vlang build-golang
+ @ printf 'WARN: %s\n' "You are abould to build all targets on multilang project"
+
+# 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:
+ @ # Make a build directory
+ @ [ ! -d build ] && { mkdir build || exit 1 ;} || exit 0
+ @ [ ! -d build/build-clang-c ] && { mkdir build/build-clang-c || exit 1 ;} || exit 0
+
+ @ # Compilation
+ @ [ ! -f build/build-clang-c/zernit-clang-c ] && { clang src/bin/main.c -o build/build-clang-c/zernit-clang-c || exit 1 ;} || exit 0
+ @ printf '%s\n' "Compilation of target for clang-c finished"
+
+build-gcc-c:
+ @ # Make a build directory
+ @ [ ! -d build ] && { mkdir build || exit 1 ;} || exit 0
+ @ [ ! -d build/target-gcc-c ] && { mkdir build/build-gcc-c || exit 1 ;} || exit 0
+
+ @ # Compilation
+ @ [ ! -f build/build-gcc-c/zernit-gcc-c ] && { gcc src/bin/main.c -o build/build-gcc-c/zernit-gcc-c || exit 1 ;} || exit 0
+ @ printf '%s\n' "Compilation of target for gcc-c 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:
+ @ cargo bench
+
+## CLEAN ##
+
+clean: clean-vendor clean-benches
+ @ [ -d build ] && { rm -rf build || exit 1 ;} || exit 0
+ @ printf '%s\n' "Build directory has been cleaned"
+
+clean-vendor:
+ @ # FIXME: Output helpful message if directory doesn't exists
+ @ [ -d vendor ] && { rm -rf vendor || exit 1 ;} || exit 0
\ No newline at end of file
diff --git a/QA/README.md b/QA/README.md
new file mode 100644
index 0000000..1c81c53
--- /dev/null
+++ b/QA/README.md
@@ -0,0 +1 @@
+Backend for Quality Assurance
\ No newline at end of file
diff --git a/QA/circle-ci/config.yml b/QA/circle-ci/config.yml
new file mode 100644
index 0000000..b1030ba
--- /dev/null
+++ b/QA/circle-ci/config.yml
@@ -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
diff --git a/QA/common/qemu_debian.sh b/QA/common/qemu_debian.sh
new file mode 100755
index 0000000..c9e9420
--- /dev/null
+++ b/QA/common/qemu_debian.sh
@@ -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
\ No newline at end of file
diff --git a/QA/common/qemu_ubuntu.sh b/QA/common/qemu_ubuntu.sh
new file mode 100755
index 0000000..72fe8c5
--- /dev/null
+++ b/QA/common/qemu_ubuntu.sh
@@ -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
\ No newline at end of file
diff --git a/QA/docker/dockerfiles/Debian/debian_gcc.Dockerfile b/QA/docker/dockerfiles/Debian/debian_gcc.Dockerfile
new file mode 100644
index 0000000..bec7dea
--- /dev/null
+++ b/QA/docker/dockerfiles/Debian/debian_gcc.Dockerfile
@@ -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"
\ No newline at end of file
diff --git a/QA/docker/dockerfiles/Exherbo/exherbo_clang.Dockerfile b/QA/docker/dockerfiles/Exherbo/exherbo_clang.Dockerfile
new file mode 100644
index 0000000..aeaa3e4
--- /dev/null
+++ b/QA/docker/dockerfiles/Exherbo/exherbo_clang.Dockerfile
@@ -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"
+"
\ No newline at end of file
diff --git a/QA/docker/dockerfiles/Exherbo/exherbo_gcc.Dockerfile b/QA/docker/dockerfiles/Exherbo/exherbo_gcc.Dockerfile
new file mode 100644
index 0000000..3b1e831
--- /dev/null
+++ b/QA/docker/dockerfiles/Exherbo/exherbo_gcc.Dockerfile
@@ -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
\ No newline at end of file
diff --git a/QA/sourcehut/README.md b/QA/sourcehut/README.md
new file mode 100644
index 0000000..3af231d
--- /dev/null
+++ b/QA/sourcehut/README.md
@@ -0,0 +1,3 @@
+This is legacy after sourcehut tests that are now blocked by https://github.com/RXT0112/Zernit/issues/51
+
+We decided to stub this here since sourcehut it cool and we would like to use it if these problems are resolved.
\ No newline at end of file
diff --git a/QA/sourcehut/rustlang.yml b/QA/sourcehut/rustlang.yml
new file mode 100644
index 0000000..b0ed5cc
--- /dev/null
+++ b/QA/sourcehut/rustlang.yml
@@ -0,0 +1,26 @@
+image: archlinux
+packages:
+ - meson
+ - scdoc
+ - wayland-protocols
+ - wlroots-git
+ - wayland
+ - libxkbcommon
+ - cairo
+ - cargo
+ - pango
+ - gdk-pixbuf2
+ - pixman
+ - libinput
+ - xorg-server-xwayland
+sources:
+ - https://github.com/RXT0112/Zernit
+tasks:
+ - build: |
+ cd Zernit
+ if git --no-pager diff --name-only origin/master | grep -q ".*.rs$"; then cargo build; fi
+ complete-build
+ - bench: |
+ cd Zernit
+ if git --no-pager diff --name-only origin/master | grep -q ".*.rs$"; then cargo bench; fi
+ complete-build
\ No newline at end of file
diff --git a/QA/tests/HELL/README.md b/QA/tests/HELL/README.md
new file mode 100644
index 0000000..1359301
--- /dev/null
+++ b/QA/tests/HELL/README.md
@@ -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
\ No newline at end of file
diff --git a/QA/tests/HELL/backend/configure_backend.sh b/QA/tests/HELL/backend/configure_backend.sh
new file mode 100755
index 0000000..e3d42e9
--- /dev/null
+++ b/QA/tests/HELL/backend/configure_backend.sh
@@ -0,0 +1,191 @@
+#!/bin/sh
+# Copyright 2019 Jacob Hrbek
+# 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 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
\ No newline at end of file
diff --git a/QA/tests/HELL/backend/get-variables.sh b/QA/tests/HELL/backend/get-variables.sh
new file mode 100755
index 0000000..a9ac51d
--- /dev/null
+++ b/QA/tests/HELL/backend/get-variables.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Copyright 2019 Jacob Hrbek
+# 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 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
\ No newline at end of file
diff --git a/QA/tests/HELL/backend/output.sh b/QA/tests/HELL/backend/output.sh
new file mode 100755
index 0000000..143dc41
--- /dev/null
+++ b/QA/tests/HELL/backend/output.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+# Copyright 2019 Jacob Hrbek
+# 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 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
+}
\ No newline at end of file
diff --git a/QA/tests/HELL/hell.sh b/QA/tests/HELL/hell.sh
new file mode 100755
index 0000000..57a5fd6
--- /dev/null
+++ b/QA/tests/HELL/hell.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Copyright 2019 Jacob Hrbek
+# 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 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
\ No newline at end of file
diff --git a/QA/tests/README.md b/QA/tests/README.md
new file mode 100644
index 0000000..179a3fd
--- /dev/null
+++ b/QA/tests/README.md
@@ -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
diff --git a/QA/tests/backend.sh b/QA/tests/backend.sh
new file mode 100644
index 0000000..08a2b24
--- /dev/null
+++ b/QA/tests/backend.sh
@@ -0,0 +1,274 @@
+#!/bin/sh
+# shellcheck disable=SC1117
+# Copyright 2019 Jacob Hrbek
+# 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 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
\ No newline at end of file
diff --git a/QA/tests/check.sh b/QA/tests/check.sh
new file mode 100755
index 0000000..fdcd1b1
--- /dev/null
+++ b/QA/tests/check.sh
@@ -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
\ No newline at end of file
diff --git a/QA/tests/shell/shellizator.bash.disabled b/QA/tests/shell/shellizator.bash.disabled
new file mode 100755
index 0000000..06b8fef
--- /dev/null
+++ b/QA/tests/shell/shellizator.bash.disabled
@@ -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"
diff --git a/QA/travis-ci/before-install.sh b/QA/travis-ci/before-install.sh
new file mode 100755
index 0000000..37676bf
--- /dev/null
+++ b/QA/travis-ci/before-install.sh
@@ -0,0 +1,214 @@
+#!/bin/bash
+# shellcheck disable=SC1117
+# Copyright 2019 Jacob Hrbek
+# 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 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
diff --git a/QA/travis-ci/build.sh b/QA/travis-ci/build.sh
new file mode 100755
index 0000000..f48ff9d
--- /dev/null
+++ b/QA/travis-ci/build.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# Copyright 2019 Jacob Hrbek
+# 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
diff --git a/QA/travis-ci/get-container.sh b/QA/travis-ci/get-container.sh
new file mode 100644
index 0000000..f73b9d2
--- /dev/null
+++ b/QA/travis-ci/get-container.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Copyright 2019 Jacob Hrbek
+# 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 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
diff --git a/QA/travis-ci/install.sh b/QA/travis-ci/install.sh
new file mode 100755
index 0000000..f2281d1
--- /dev/null
+++ b/QA/travis-ci/install.sh
@@ -0,0 +1,132 @@
+#!/usr/bin/env bash
+# shellcheck disable=SC1117
+# Copyright 2019 Jacob Hrbek
+# 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 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
diff --git a/QA/travis-ci/retry.sh b/QA/travis-ci/retry.sh
new file mode 100755
index 0000000..c199235
--- /dev/null
+++ b/QA/travis-ci/retry.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+# Copyright 2019 Jacob Hrbek
+# 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 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"
diff --git a/QA/travis-ci/test.sh b/QA/travis-ci/test.sh
new file mode 100755
index 0000000..eed8547
--- /dev/null
+++ b/QA/travis-ci/test.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Copyright 2019 Jacob Hrbek
+# 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
diff --git a/QA/travis-ci/travis-common.sh b/QA/travis-ci/travis-common.sh
new file mode 100755
index 0000000..b4fd34b
--- /dev/null
+++ b/QA/travis-ci/travis-common.sh
@@ -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"
+}
\ No newline at end of file
diff --git a/bandit.yml b/bandit.yml
new file mode 100644
index 0000000..0a1f880
--- /dev/null
+++ b/bandit.yml
@@ -0,0 +1,2 @@
+# Configuration file for bandit (security check for python)
+
diff --git a/benches/README.md b/benches/README.md
new file mode 100644
index 0000000..f27eb74
--- /dev/null
+++ b/benches/README.md
@@ -0,0 +1,5 @@
+Directory for benchmarks of the source
+
+FIXME: Add benchmarks
+
+FIXME: Differenciate benchmarks per programming language i.e benches/rustlang/example_bench.rs
\ No newline at end of file
diff --git a/benches/example_bench.rs b/benches/example_bench.rs
new file mode 100644
index 0000000..8c6c2c7
--- /dev/null
+++ b/benches/example_bench.rs
@@ -0,0 +1,22 @@
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+
+/*
+ This is base benchmark made for consistency
+
+ FIXME-BENCH: Make cargo to recognize `benches/rustlang` path instead of `benches/`
+*/
+
+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);
\ No newline at end of file
diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 0000000..0b3ecd6
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1 @@
+Directory for various Dockerfiles
\ No newline at end of file
diff --git a/docs.new/README.md b/docs.new/README.md
new file mode 100644
index 0000000..572217f
--- /dev/null
+++ b/docs.new/README.md
@@ -0,0 +1,11 @@
+Stub for new website implementation
+
+Expecting
+- User database to handle the workflow
+- Method to host repositories
+ - sourcehut implementation
+- Social-network like platform so that users can communicate with each other
+
+efficency is a concer when php 8.0 and golang seems to be the best candidates
+
+for golang https://github.com/gogs/gogs could be forked?
\ No newline at end of file
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100755
index 0000000..b841658
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,8 @@
+.jekyll-cache/
+!.gitignore
+!.gitmodules
+*~
+
+components/
+
+_site/
diff --git a/docs/.gitpod.yml b/docs/.gitpod.yml
new file mode 100644
index 0000000..a92ddaf
--- /dev/null
+++ b/docs/.gitpod.yml
@@ -0,0 +1,9 @@
+image:
+ file: gitpod/gitpod.Dockerfile
+
+ports:
+ - port: 4000
+ onOpen: open-preview
+
+tasks:
+ - init: gem install jekyll
\ No newline at end of file
diff --git a/docs/LICENSE.md b/docs/LICENSE.md
new file mode 100644
index 0000000..38c6bf2
--- /dev/null
+++ b/docs/LICENSE.md
@@ -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.
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000..41d7da5
--- /dev/null
+++ b/docs/Makefile
@@ -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
diff --git a/docs/README.md b/docs/README.md
new file mode 100755
index 0000000..3d8432b
--- /dev/null
+++ b/docs/README.md
@@ -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. Go ahead, see if we care.
+
+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.
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100755
index 0000000..60febca
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,6 @@
+---
+exclude: ['README.markdown', 'gitpod']
+permalink: ':title'
+pygments: true
+safe: false
+title: 'Zernit'
\ No newline at end of file
diff --git a/docs/_includes/nav.html b/docs/_includes/nav.html
new file mode 100644
index 0000000..5a9f88b
--- /dev/null
+++ b/docs/_includes/nav.html
@@ -0,0 +1,19 @@
+
{{ site.title }}
+
+ {% for post in site.posts %}
+ {% if post.category == null %}
+