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.
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.
Guide for writing consistent and idiomatic shell scripts.
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.
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.
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.
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.
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.
PowerShell is a task automation and configuration management framework from Microsoft, consisting of a command-line shell and the associated scripting language.
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.
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.
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.
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).
Provides a best practices layout for structuring PowerShell projects. It covers organizing scripts, modules, and supporting files for better maintainability and collaboration.
Microsoft official documentation for PowerShell covers all aspects of the language, including syntax, cmdlets, advanced features, and use cases for automation and configuration management.
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.
PowerShell verbs define the standard for naming cmdlets and functions to ensure consistency and predictability, with a set of approved verbs for common actions.
MkDocs is a Static Site Generator (SSG) designed for building project documentation based on Markdown files and converts them into a full-featured website.
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.
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 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.
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 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.
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.
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.
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 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 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.
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) 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.
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 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.
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.
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.
Analysis
[x] terraform fmt
Formatting of configuration in the standard style.
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.
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.
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.
Continuous Delivery (CD) and Continuous Deployment (CD) are practices to automate and streamline the process of delivering software updates to production environments.
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 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 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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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 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 (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.
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
Language
Test Frameworks
[x] Testing
[ ] GoConvey
Authentication
Authorization
Web Frameworks
[x] Chi
[ ] Echo
[ ] Gin
[ ] Fiber
ORM
Caching
Logging
[x] Zap
[ ] Logrus
[ ] Zerolog
Documentation
Conventions
1.1.2. Frontend
Language
[ ] JavaScript
[ ] TypeScript
CSS Frameworks
[ ] TailwindCSS
[ ] Bootstrap
Frameworks
[ ] React
[ ] Vue
UI Components
State Management
[ ] Redux
[ ] Vuex
Packaging
[ ] Webpack
[ ] Vite
Test Frameworks
1.1.3. Deployment
Web Server
[ ] caddy
[ ] NGINX
Reverse Proxy
SSL/TLS
1.2. Python
Language
Analysis
[x] Pylint
[x] Black
Test Frameworks
Conventions
1.3. Shell
Language
Analysis
[x] ShellCheck
[x] shfmt
Test Frameworks
Conventions
1.4. PowerShell
Language
[x] PowerShell
[x] PowerShell Advanced Functions
[x] PowerShell Module
Analysis
Test Frameworks
Architecture
Conventions
[x] PowerShell Documentation
[x] Cmdlet Development Guidelines
[x] PowerShell Verbs
1.5. Documentation
Documentation as Code (DAC)
Language
Analysis
Static Site Generator (SSG)
Hosting Platform
[x] GitLab Pages
[x] GitHub Pages
Conventions
[x] Google Markdown Style Guide
[ ] GitLab Documentation Style Guide
1.6. DevOps
Version Control System (VCS)
DevOps Platform
[ ] GitHub
[ ] GitLab
Containerization
[x] Docker
[ ] Podman
Orchestration
[ ] Kubernetes
[x] Docker Compose
1.7. DevSecOps
Secrets Management
[X] SOPS
[ ] Kubernetes Secrets
[ ] HashiCorp Vault
Policy Management
[x] HashiCorp Sentinel
[ ] Open Policy Agent (OPA)
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.
Language
[x] Terraform
[ ] OpenTofu
Frameworks
[x] Terraform AWS Provider
[x] Terraform AWS Modules
Analysis
[x] terraform fmt
[x] TFLint
[x] trivy
Test Frameworks
[x] terraform test
[ ] Terratest
[ ] terraform-compliance
Documantion
Conventions
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.
Language
Frameworks
[x] Ansible Collections
Analysis
Test Frameworks
[x] ansible-test
[ ] Molecule
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.
Frameworks
[ ] Terraform Enterprise
[ ] Spinnaker
[ ] Argo CD
[ ] Flux
1.9. Cloud Computing
Provider
[x] AWS
[ ] OpenStack
Reverse Proxy
SSL/TLS
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.
Monitoring
[x] Prometheus
[x] Prometheus Alertmanager
[x] Prometheus Node Exporter
[ ] Prometheus Blackbox Exporter
[x] Grafana
Logging
[x] Grafana Loki
[x] Grafana Promtail
Tracing
[ ] Grafana Tempo
[ ] Grafana Alloy
Conventions
[ ] OpenTelemetry
[ ] OpenMetrics
[ ] eBPF
1.11. Database
Relational Database
Non-Relational Database
In-Memory Database
2. References