All Projects → no0dles → hammerkit

no0dles / hammerkit

Licence: MIT license
build tool with support for containerization, build caching for local development and ci

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to hammerkit

Textrude
Code generation from YAML/JSON/CSV models via SCRIBAN templates
Stars: ✭ 79 (+58%)
Mutual labels:  yaml, build-tool
Bashful
Use a yaml file to stitch together commands and bash snippits and run them with a bit of style. Why? Because your bash script should be quiet and shy-like (...and not such a loud mouth).
Stars: ✭ 1,018 (+1936%)
Mutual labels:  yaml, build-tool
tdiff
CLI tool for comparing tree like structures
Stars: ✭ 20 (-60%)
Mutual labels:  yaml
multilanguages
AKSoftware.Localization.MultiLanguages is a package for .NET developers allows them to easily build apps target multiple languages with just few lines of code
Stars: ✭ 54 (+8%)
Mutual labels:  yaml
yamlfmt
A simple opionated yaml formatter that keeps your comments!
Stars: ✭ 27 (-46%)
Mutual labels:  yaml
webpacker
🔸 Webpack configuration manager
Stars: ✭ 18 (-64%)
Mutual labels:  build-tool
csvy
Import and Export CSV Data With a YAML Metadata Header
Stars: ✭ 52 (+4%)
Mutual labels:  yaml
meteor-graphql
Compiler plugin that supports GraphQL files in Meteor
Stars: ✭ 56 (+12%)
Mutual labels:  build-tool
Slim-Config
A file configuration loader that supports PHP, INI, XML, JSON, and YML files for the Slim Framework. It internally uses https://github.com/hassankhan/config.
Stars: ✭ 28 (-44%)
Mutual labels:  yaml
koshry
Run on CI, Apply Rules on the Build and Get the Result back to the Pull Request.
Stars: ✭ 59 (+18%)
Mutual labels:  ci-tools
nss-run
nss-run (not so simple run) is a very simplistic build tool.
Stars: ✭ 14 (-72%)
Mutual labels:  build-tool
rote
Automate everything.
Stars: ✭ 66 (+32%)
Mutual labels:  build-tool
KaiZen-OpenApi-Parser
High-performance Parser, Validator, and Java Object Model for OpenAPI 3.x
Stars: ✭ 119 (+138%)
Mutual labels:  yaml
crimson
Bioinformatics tool outputs converter to JSON or YAML
Stars: ✭ 30 (-40%)
Mutual labels:  yaml
crossbow
Cross-Platform Rust Toolkit for Games 🏹
Stars: ✭ 80 (+60%)
Mutual labels:  build-tool
atbuild
Use JavaScript to generate JavaScript
Stars: ✭ 26 (-48%)
Mutual labels:  build-tool
flutter plus
Develop applications in Flutter more quickly and easily. Customize Containers, Buttons, Texts and TextFields in a few lines. Navigate between Screens and open BottomSheets, Dialogs and Snackbars without context from any point.
Stars: ✭ 17 (-66%)
Mutual labels:  yaml
parse it
A python library for parsing multiple types of config files, envvars & command line arguments that takes the headache out of setting app configurations.
Stars: ✭ 86 (+72%)
Mutual labels:  yaml
cq
Clojure Command-line Data Processor for JSON, YAML, EDN, XML and more
Stars: ✭ 111 (+122%)
Mutual labels:  yaml
parcel-css
A CSS parser, transformer, and minifier written in Rust.
Stars: ✭ 1,856 (+3612%)
Mutual labels:  build-tool

hammerkit

Hammerkit

build license npm

About

Hammerkit is a build tool intended to build software projects in containers locally and in a CI. The advantage of containerized builds are:

  • the build tools used from the container image are the same across all machines.
  • the build process is isolated since every file in the container has to be declared as a source or an output. Therefore side effect should never occur.

There are a lot of containerized CI systems that allow writing containerized builds today, but they lack some features hammerkit tries to solve:

  • they are often not usable during development on your local machine, so you have either maintain two build scripts or wrap one of them in the other.
  • they mount the entire repository into the container and can therefore side effect can reduce reliability
  • some of them do not allow switching images during build steps. Requiring to maintain a large build image, that contains all tools needed to build to software.

Additionally hammerkit tries to reduce complexity of build caching in CI systems. Usually you define a directory that is being cached and restored before and after the CI build. That's totally fine for smaller project where there are not that many directories to cache. The bigger the project gets, the more effort it is, to keep all directories up to date.

Hammerkit on the other hand knows the source and output files of each build step and can therefore compact the build results into a single directory. Making it easy to being cached. Once restored, hammerkit can detect what's changed since last time and only build the changes.

docs

Installation

Yarn/npm

npm i -g hammerkit

Homebrew

brew tap no0dles/hammerkit
brew install hammerkit

Gitlab CI

variables:
  DOCKER_DRIVER: overlay2

services:
  - docker:19.03.0-dind

build:
  image: no0dles/hammerkit
  script:
    - hammerkit build

Github Action

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '14'
      - uses: no0dles/[email protected]

Roadmap

The following topics are planned to be addressed in the future.

Services

Task sometimes require some service to run. For example a database, which is required to run an api or an integration test. The goal will be to define those and hammerkit spins them up for the task and shuts them down if not needed.

Distributed caching

Distribute local cache, so other developers and the CI can use already build up caches. The goal will be general performance improvements on CI and local development.

Distributed computing

Offload complex and compute intense tasks to remote hardware. The goal will be use the power of cloud computing, with very less configuration.

Platform requirements

Define tasks that require a specific platform for local tasks. The goal will be to either skip local tasks where platform requirements are not met or execute them on a remote machine.

Release

npm version patch|minor|major|prerelease
git push origin --tags
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].