sentenz / convention

General articles, conventions, and guides.
https://sentenz.github.io/convention/
Apache License 2.0
4 stars 2 forks source link

Create an article about `Tech Stack` #300

Open sentenz opened 8 months ago

sentenz commented 8 months ago

Tech Stack

Tech Stack (Technology Stack) refers to the combination of technologies, tools, databases, and frameworks used to develop and run a software application. It encompasses everything from programming languages and libraries to development frontend and backend tools and infrastructure components. A tech stack significantly influences the development process, performance, scalability, and maintainability of the application.

1. Category

1.1. Go

1.1.1. Backend

  1. Language

    • [x] Go (Golang)

      A statically typed, compiled language.

  2. Test Frameworks

    • [x] Testing

      Go builtin TDD-style testing framework for unit, fuzz, and bench tests.

    • [ ] GoConvey

      BDD-style testing framework.

  3. Authentication

    • [x] Goth

      A package for handling OAuth and OAuth2 authentication.

  4. Authorization

    • [x] Casbin

      An authorization library that supports access control models like ACL, RBAC, ABAC.

  5. Web Frameworks

    • [x] Chi

      A lightweight, idiomatic web framework for Go.

    • [ ] Echo

      A fast and minimalist web framework for routing HTTP requests.

    • [ ] Gin

      Gin is a web framework.

    • [ ] Fiber

      Express inspired web framework built on top of Fasthttp.

  6. ORM

    • [x] GORM

      A ORM (Object Relational Mapping) library to work with relational databases.

  7. Caching

    • [x] GroupCache

      GroupCache is a caching and cache-filling library, intended as a replacement for memcached.

  8. Logging

    • [x] Zap

      Fast, structured, leveled logging in Go.

    • [ ] Logrus

      Structured, pluggable logging for Go.

    • [ ] Zerolog

      Zero-allocation JSON logger.

  9. Documentation

    • [ ] Swagger

      Swagger is a set of open-source tools built around the OpenAPI Specification that can help to design, build, document, and consume REST APIs.

  10. Conventions

    • [x] Google Go Style Guide

      The Go Style Guide and accompanying documents codify the current best approaches for writing readable and idiomatic Go.

1.1.2. Frontend

  1. Language

    • [ ] JavaScript

      JavaScript is a programming language that conforms to the ECMAScript specification.

    • [ ] TypeScript

      TypeScript is a superset of JavaScript that compiles to plain JavaScript.

  2. CSS Frameworks

    • [ ] TailwindCSS

      A utility-first CSS framework for rapidly building custom designs.

    • [ ] Bootstrap

      HTML, CSS, and JavaScript framework for developing responsive, mobile projects on the web.

  3. Frameworks

    • [ ] React

      React is a JavaScript library for building user interfaces.

    • [ ] Vue

      Vue is a progressive framework for building user interfaces.

  4. UI Components

    • [ ] DaisyUI

      DaisyUI is a component library for Tailwind CSS.

  5. State Management

    • [ ] Redux

      Redux is a predictable state container for JavaScript apps.

    • [ ] Vuex

      Vuex is a state management pattern and library for Vue.js applications.

  6. Packaging

    • [ ] Webpack

      Webpack is a static module bundler for modern JavaScript applications.

    • [ ] Vite

      Vite is a build tool that aims to provide a faster and leaner development experience for modern web projects.

  7. Test Frameworks

    • [ ] Jest

      Jest is a JavaScript Testing Framework.

1.1.3. Deployment

  1. Web Server

    • [ ] caddy

      Caddy is a powerful, extensible, enterprise-ready server.

    • [ ] NGINX

      NGINX is a web server that can also be used as a reverse proxy, load balancer, mail proxy, and HTTP cache.

  2. Reverse Proxy

    • [x] traefik

      traefik is a modern HTTP reverse proxy and load balancer.

  3. SSL/TLS

    • [x] Let's Encrypt

      Let's Encrypt is a free, automated, and open certificate authority.

1.2. Python

  1. Language

    • [x] Python

      The repositories related to the Python programming language.

  2. Analysis

    • [x] Pylint

      Pylint is a static code analyser for Python 2 or 3.

      [!NOTE] Resource file pylintrc for Google Python Style Guide.

    • [x] Black

      The uncompromising Python code formatter.

  3. Test Frameworks

    • [x] pytest

      pytest is widely used for writing simple as well as scalable test cases in Python. It supports fixtures, parameterized testing, and has a rich plugin architecture, making it highly extensible. The framework is known for its ease of use and powerful features, which help developers ensure their code works as expected.

  4. Conventions

1.3. Shell

[!NOTE] Prefer using high-level interpreted languages like Python over Shell scripts to benefit from more readable syntax and mature tools for unit testing, linting, formatting, and error reporting.

  1. Language

    • [x] Bash

      Bash (Bourne Again SHell) is a Unix shell and command language for writing scripts to automate tasks and workflows.

  2. Analysis

    • [x] ShellCheck

      ShellCheck is a static analysis tool for shell scripts. It helps developers identify and fix common issues in their shell scripts, such as syntax errors, semantic problems, and potential pitfalls. By analyzing the script, ShellCheck provides detailed warnings and suggestions for improving the script's robustness and readability.

    • [x] shfmt

      shfmt is a shell script formatter that automatically formats shell scripts to follow a consistent style. It supports various shell dialects, including Bash, Dash, and Ksh. By using shfmt, developers can ensure that their shell scripts are uniformly formatted, which enhances readability and maintainability.

  3. Test Frameworks

    • [ ] Bast

      Bats (Bash Automated Testing System) is a TDD-style testing framework for Bash scripts. It provides a simple way to write tests for shell scripts, allowing developers to ensure that their scripts behave as expected. Bats tests are written as Bash scripts, and the framework provides helpful output in case of test failures, making it easier to diagnose issues.

  4. Conventions

    • [x] Google Shell Style Guide

      The Google Shell Style Guide provides best practices and coding standards for writing shell scripts. It covers various aspects such as naming conventions, indentation, commenting, and scripting practices to ensure that shell scripts are readable, maintainable, and consistent across different projects.

1.4. PowerShell

  1. Language

    • [x] PowerShell

      PowerShell is a task automation and configuration management framework from Microsoft, consisting of a command-line shell and the associated scripting language.

    • [x] PowerShell Advanced Functions

      PowerShell Advanced Functions are a powerful feature that allows developers to create functions with capabilities similar to cmdlets. These functions can include parameters, support for pipeline input, and advanced validation, making them highly versatile for scripting and automation tasks. Advanced functions can also include features such as parameter attributes, which provide more control over how parameters are handled and validated.

    • [x] PowerShell Module

      PowerShell Modules are packages that contain PowerShell commands, such as cmdlets, functions, workflows, variables, and aliases. Writing a PowerShell script module allows developers to encapsulate and distribute their PowerShell code in a reusable and organized manner.

  2. Analysis

    • [x] PSScriptAnalyzer

      PSScriptAnalyzer is a static code analysis tool for PowerShell scripts. It helps developers identify and correct issues in their PowerShell code by providing a set of built-in rules that check for best practices, coding standards, and potential errors. PSScriptAnalyzer can be integrated into development workflows to automatically analyze scripts and provide feedback, ensuring that the code is clean, efficient, and maintainable.

  3. Test Frameworks

    • [ ] Pester

      Pester is a testing framework for PowerShell, designed to help developers write and run unit tests for their PowerShell scripts and modules. It provides a syntax for defining tests and includes features such as mocking, assertions, and test discovery. Pester is used in the PowerShell community for ensuring that scripts and modules behave as expected and for facilitating Test-Driven Development (TDD).

  4. Architecture

    • [x] Project Layout

      Provides a best practices layout for structuring PowerShell projects. It covers organizing scripts, modules, and supporting files for better maintainability and collaboration.

  5. Conventions

    • [x] PowerShell Documentation

      Microsoft official documentation for PowerShell covers all aspects of the language, including syntax, cmdlets, advanced features, and use cases for automation and configuration management.

    • [x] Cmdlet Development Guidelines

      Guidelines and best practices for developing PowerShell cmdlets, including details on naming conventions, parameter handling, and output formatting to ensure consistency and ease of use.

    • [x] PowerShell Verbs

      PowerShell verbs define the standard for naming cmdlets and functions to ensure consistency and predictability, with a set of approved verbs for common actions.

1.5. Documentation

Documentation as Code (DAC)

  1. Language

    • [x] Markdown

      Markdown is a lightweight markup language with plain text formatting syntax.

  2. Analysis

    • [x] markdownlint

      A static analysis tool for Markdown files that ensures adherence to formatting rules and conventions.

  3. Static Site Generator (SSG)

    • [x] MkDocs

      MkDocs is a Static Site Generator (SSG) designed for building project documentation based on Markdown files and converts them into a full-featured website.

  4. Hosting Platform

    • [x] GitLab Pages

      GitLab Pages is used for hosting the static documentation website generated by Static Site Generators (SSG).

    • [x] GitHub Pages

      GitHub Pages is used for hosting the static documentation website generated by Static Site Generators (SSG).

  5. Conventions

1.6. DevOps

  1. Version Control System (VCS)

    • [x] Git

      Git is a distributed version control system used for tracking changes in source code during software development. It allows multiple developers to work on a project simultaneously without interfering with each other's work. Git provides features such as branching, merging, and version history, which help manage and coordinate collaborative development efforts.

  2. DevOps Platform

    • [ ] GitHub

      GitHub is a web-based platform that uses Git for version control and provides a collaborative environment for software development. It offers a range of features including repositories for hosting code, issue tracking, pull requests for code reviews, and CI/CD pipelines. GitHub also supports collaboration through features like wikis, project boards, and discussions.

    • [ ] GitLab

      GitLab is a web-based DevOps lifecycle platform that provides a Git repository manager with features such as issue tracking, CI/CD pipelines, and project management. It is designed to support the entire software development lifecycle, from planning and source code management to CI/CD and monitoring. GitLab offers both a cloud-hosted service and a self-hosted option, giving teams flexibility in how they manage their projects.

  3. Containerization

    • [x] Docker

      Docker is a platform that enables developers to automate the deployment of applications inside lightweight, portable containers. Containers package an application and its dependencies together, ensuring that the application runs consistently across different environments. Docker is used for its ability to simplify the development, testing, and deployment processes by providing a consistent runtime environment.

    • [ ] Podman

      Podman is an open-source container management tool that provides a way to manage and run containers without requiring a daemon like Docker. It is designed to be compatible with Docker, allowing users to run and manage containers using similar commands. Podman supports rootless containers, which enhances security by allowing containers to be run without root privileges.

  4. Orchestration

    • [ ] Kubernetes

      Kubernetes is an open-source platform designed for automating the deployment, scaling, and operation of application containers. It provides a robust framework for running distributed systems resiliently, handling scaling and failover for applications, and providing deployment patterns. Kubernetes can manage containerized applications across a cluster of machines, offering features such as automated rollouts and rollbacks, service discovery, load balancing, and storage orchestration.

    • [x] Docker Compose

      Docker Compose is a tool that simplifies the management of multi-container Docker applications. It allows developers to define a multi-container application using a YAML file and run it with a single command. Docker Compose provides a way to define services, networks, and volumes for a multi-container application, making it easier to set up and manage complex environments.

1.7. DevSecOps

  1. Secrets Management

    • [X] SOPS

      SOPS (Secrets OPerationS) is an open-source tool designed for managing secrets, such as passwords, API keys, and other sensitive information. It allows to encrypt and decrypt files containing secrets using various encryption backends, including AWS KMS, GCP KMS, Azure Key Vault, and PGP. SOPS ensures that the secrets are securely stored and can be easily integrated into the development and deployment workflows.

    • [ ] Kubernetes Secrets

      Kubernetes Secrets are a native mechanism in Kubernetes to manage sensitive information such as passwords, OAuth tokens, and SSH keys. Secrets are stored securely within the cluster and can be mounted as volumes or exposed as environment variables to applications running in pods. Kubernetes Secrets provide a way to manage sensitive data in a secure and efficient manner, ensuring that secrets are not exposed in configuration files or source code.

    • [ ] HashiCorp Vault

      HashiCorp Vault is an open-source tool designed to securely manage secrets and protect sensitive data. It provides a unified interface to handle various types of secrets, such as API keys, passwords, certificates, and encryption keys, ensuring that they are stored and accessed in a secure manner. Vault offers features such as dynamic secrets, encryption as a service, and access control policies to help organizations manage secrets effectively.

  2. Policy Management

    • [x] HashiCorp Sentinel

      HashiCorp Sentinel is a policy-as-code framework designed to enable fine-grained, logic-based policy decisions. It allows organizations to define and enforce policies that govern the behavior and configuration of their infrastructure and applications. Sentinel policies are written in a high-level language that is both expressive and easy to understand, making it accessible for both developers and operations teams.

    • [ ] Open Policy Agent (OPA)

      Open Policy Agent (OPA) is an open-source policy engine that enables organizations to define and enforce policies across the software development lifecycle. OPA provides a declarative language for writing policies, a runtime for evaluating policies, and integrations with various tools and platforms. It can be used to enforce policies related to security, compliance, and operational best practices, ensuring that applications and infrastructure are configured correctly.

1.8. GitOps

GitOps is a modern approach to continuous delivery and infrastructure management that leverages Git as the single source of truth for declarative infrastructure and application configurations. In a GitOps workflow, all changes to the infrastructure and application state are made through pull requests to a Git repository. These changes are then automatically applied to the target environment by a GitOps operator, ensuring that the actual state of the system matches the desired state defined in the repository.

1.8.1. Infrastructer

Infrastructure as Code (IaC) is a practice in which infrastructure is provisioned and managed using code and software development techniques, such as version control and continuous integration. Instead of manually configuring hardware and software resources, IaC allows to define infrastructure in configuration files that can be edited, reviewed, and versioned. This approach ensures that infrastructure setups are consistent, repeatable, and scalable.

  1. Language

    • [x] Terraform

      Terraform is an open-source Infrastructure as Code (IaC) tool developed by HashiCorp. It allows users to define and provision data center infrastructure using a high-level configuration language known as HashiCorp Configuration Language (HCL). Terraform enables the automation of infrastructure management tasks to create, update, and version infrastructure safely and efficiently.

    • [ ] OpenTofu

      OpenTofu is an open-source project that aims to provide a flexible and extensible framework for building and managing infrastructure. It is designed to be highly modular, allowing users to customize and extend its functionality to meet their specific needs. OpenTofu supports a wide range of infrastructure providers and services, making it a versatile tool for managing complex environments.

  2. Frameworks

    • [x] Terraform AWS Provider

      The Terraform AWS Provider is a plugin for Terraform that allows users to manage and interact with Amazon Web Services (AWS) resources. The provider enables to define AWS infrastructure using Terraform's configuration language, making it possible to automate the provisioning and management of AWS services such as EC2 instances, S3 buckets, and RDS databases.

    • [x] Terraform AWS Modules

      Terraform AWS Modules are pre-configured, reusable modules designed to simplify the process of managing AWS infrastructure using Terraform. The modules encapsulate common infrastructure patterns and best practices, allowing users to quickly provision AWS resources without having to write complex configurations from scratch. Terraform AWS Modules cover a wide range of AWS services, including VPCs, EC2 instances, and RDS databases.

  3. Analysis

    • [x] terraform fmt

      Formatting of configuration in the standard style.

    • [x] TFLint

      Linting of configuration files.

    • [x] trivy

      Scanning of configuration files for vulnerabilities.

  4. Test Frameworks

    • [x] terraform test

      TDD-style testing by writing Terraform integration tests, unit tests, or mocks to verify Infrastructure as Code (IaC) configurations.

    • [ ] Terratest

      TDD-style testing for Infrastructure as Code (IaC) configurations.

    • [ ] terraform-compliance

      BDD-style testing for Infrastructure as Code (IaC) configurations.

  5. Documantion

  6. Conventions

    • [x] HashiCorp Terraform Style Guide

      The HashiCorp Terraform Style Guide is a comprehensive resource that provides best practices and guidelines for writing Terraform configurations. It covers various aspects of Terraform configuration, including file structure, naming conventions, resource definitions, and module usage.

1.8.2. Configuration

Configuration as Code (CaC) is a practice of managing configuration settings and parameters for software applications using code. This approach allows configurations to be versioned, reviewed, and maintained in Version Control System (VCS), ensuring consistency, repeatability, and transparency.

  1. Language

    • [x] Ansible

      Ansible is an open-source Configuration as Code (CaC) tool to streamline the process of configuration management, application deployment, and task automation. It uses a declarative language to describe the desired state of the systems and applications, making it easy to manage complex environments. Ansible is agentless, meaning it does not require any special software to be installed on the managed nodes, which simplifies its setup and reduces overhead.

  2. Frameworks

    • [x] Ansible Collections

      Ansible Collections are curated and pre-packaged Ansible content that includes playbooks, roles, modules, and plugins. Collections provide a way to organize and distribute Ansible content, making it easier to share and reuse automation code across different projects. Ansible Collections cover a wide range of use cases, including cloud provisioning, network automation, security compliance, and application deployment.

  3. Analysis

  4. Test Frameworks

    • [x] ansible-test

      Ansible-test is a tool for testing automation on local docker images.

    • [ ] Molecule

      TODO

1.8.3. Deployment

Continuous Delivery (CD) and Continuous Deployment (CD) are practices to automate and streamline the process of delivering software updates to production environments.

  1. Frameworks

    • [ ] Terraform Enterprise

      Terraform Enterprise is a commercial offering from HashiCorp designed to provide advanced features and capabilities for managing infrastructure as code at scale. Terraform Enterprise is a self-hosted distribution of Terraform Cloud that provides a private instance of the Terraform Cloud platform. Terraform Enterprise is designed for teams working on complex infrastructure projects that require advanced security, compliance, and governance capabilities. It offers features such as role-based access control, remote state management, policy enforcement, and audit logging to help organizations manage their infrastructure effectively.

    • [ ] Spinnaker

      Spinnaker is an open-source, multi-cloud continuous delivery platform designed to facilitate the deployment and management of applications across various cloud environments. Developed by Netflix and later open-sourced, Spinnaker provides a robust set of features for automating the software release process, including deployment pipelines, monitoring, and rollback capabilities.

    • [ ] Argo CD

      Argo CD is a declarative, GitOps continuous delivery tool specifically designed for Kubernetes. It automates the deployment of applications to Kubernetes clusters by continuously monitoring Git repositories for changes and synchronizing the desired state defined in the repository with the actual state of the cluster. This ensures that the deployment process is consistent, repeatable, and auditable, aligning with the principles of GitOps.

    • [ ] Flux

      Flux is a GitOps continuous delivery tool for Kubernetes that automates the deployment of applications by synchronizing the desired state defined in Git repositories with the actual state of Kubernetes clusters. Flux continuously monitors the specified Git repositories for changes and applies those changes to the cluster, ensuring that the deployment process is consistent, repeatable, and auditable.

1.9. Cloud Computing

  1. Provider

    • [x] AWS

      The Amazon Web Services (AWS) provider is used to interact with the resources supported by AWS.

    • [ ] OpenStack

      The OpenStack provider is used to interact with the resources supported by OpenStack.

  2. Reverse Proxy

    • [x] traefik

      traefik is a modern HTTP reverse proxy and load balancer.

  3. SSL/TLS

    • [x] Let's Encrypt

      Let's Encrypt is a free, automated, and open certificate authority.

1.10. Observability

Observability is the practice of monitoring and understanding the behavior of complex systems by collecting and analyzing data from various sources. It involves tracking metrics, logs, and traces to gain insights into the performance, reliability, and security of applications and infrastructure. Observability tools provide visibility into the internal state of systems, enabling teams to detect issues, troubleshoot problems, and optimize performance.

  1. Monitoring

    • [x] Prometheus

      Prometheus is an open-source monitoring and alerting toolkit designed for reliability and scalability. Part of the Cloud Native Computing Foundation (CNCF), Prometheus is used for collecting and storing metrics as time series data, providing querying capabilities, and generating alerts based on those metrics.

    • [x] Prometheus Alertmanager

      Prometheus Alertmanager is an open-source tool designed to handle alerts generated by Prometheus monitoring systems. It manages the entire lifecycle of alerts, including deduplication, grouping, routing, and silencing. Alertmanager ensures that alerts are delivered to the right people or systems at the right time, helping teams respond quickly and effectively to issues.

    • [x] Prometheus Node Exporter

      Prometheus Node Exporter is an open-source tool designed to expose a wide variety of hardware and kernel-related metrics from Linux systems. It is a key component in the Prometheus ecosystem, enabling the collection of detailed system-level metrics that can be used to monitor the health and performance of the infrastructure.

    • [ ] Prometheus Blackbox Exporter

      The Prometheus Blackbox Exporter is a specialized tool designed to probe endpoints over protocols and report the results as metrics to a Prometheus server. Endpoint probing is a critical aspect of monitoring services from an external perspective by testing the availability and performance of network services by sending requests to specific endpoints and analyzing the responses. The Blackbox Exporter supports various probing methods, including HTTP, HTTPS, DNS, TCP, ICMP, and gRPC.

    • [x] Grafana

      Grafana is an open-source analytics and interactive visualization web application. It is used for monitoring and observability, providing tools to visualize time-series data collected from various sources, including Prometheus, InfluxDB, and Elasticsearch. Grafana allows to create and share dynamic dashboards that offer insights into the performance and health of applications and infrastructure.

  2. Logging

    • [x] Grafana Loki

      Grafana Loki is an open-source log aggregation system designed to efficiently collect, store, and query logs from various sources. Loki is optimized for cost-effective operation and seamless integration with Grafana.

    • [x] Grafana Promtail

      Grafana Promtail is an open-source log collection agent designed to work seamlessly with Grafana Loki. Promtail is responsible for gathering log data from various sources, such as application logs, system logs, and container logs, and forwarding to Loki for storage and analysis. It is designed to be lightweight and efficient, ensuring minimal impact on system performance while providing robust log collection capabilities.

  3. Tracing

    • [ ] Grafana Tempo

      Grafana Tempo is an open-source, high-scale distributed tracing backend designed to ingest and store trace data from various sources. Tempo is built to be cost-efficient and scalable, requiring only object storage to operate. Tempo integrates seamlessly with other Grafana observability tools, such as Grafana and Loki, providing a comprehensive observability solution.

    • [ ] Grafana Alloy

      Grafana Alloy is an open-source distribution of the OpenTelemetry Collector, designed to aggregate observability signals such as metrics, logs, and traces from various sources. Grafana Alloy aims to provide a unified and streamlined approach to collecting, processing, and exporting telemetry data, making it easier to monitor and understand the performance and health of the applications and infrastructure.

  4. Conventions

    • [ ] OpenTelemetry

      OpenTelemetry is an open-source observability framework designed to provide a unified set of APIs, libraries, agents, and instrumentation to capture distributed traces and metrics from applications. It aims to standardize the collection of telemetry data, making it easier to monitor and understand the performance and behavior of complex systems. OpenTelemetry supports a wide range of programming languages and integrates seamlessly with various backends and observability tools.

    • [ ] OpenMetrics

      OpenMetrics is an open standard for transmitting metrics at scale, designed to provide a consistent and efficient way to collect and transport metric data. It aims to unify the various metrics formats used by different monitoring systems, making it easier to integrate and exchange metric data across diverse platforms and tools.

    • [ ] eBPF

      eBPF (extended Berkeley Packet Filter) is a technology that allows to run sandboxed programs in the Linux kernel without changing kernel source code or loading kernel modules. Originally designed for packet filtering, eBPF has evolved into a versatile tool for a wide range of use cases, including performance monitoring, security, and networking.

1.11. Database

  1. Relational Database

    • [x] PostgreSQL

      PostgreSQL is a powerful, open-source object-relational database system.

  2. Non-Relational Database

    • [ ] MongoDB

      MongoDB is a general-purpose, document-based, distributed database non-relational database.

  3. In-Memory Database

    • [ ] Redis

      Redis is an in-memory database that persists on disk.

2. References