Commit graph

394 commits

Author SHA1 Message Date
Gerald Pinder
b60f1ada45 chore: Update CODEOWNERS 2024-08-31 17:58:06 -04:00
Gerald Pinder
7c4eee2862 fix: Ensure that debug logs header for builds properly display the time 2024-08-31 12:36:28 -04:00
Gerald Pinder
74d99f2b17 feat: Color output in terminal if running in TTY 2024-08-30 23:40:53 -04:00
Gerald Pinder
54c35a870f chore: Make sigstore an optional dep 2024-08-25 14:58:20 -04:00
Gerald Pinder
43dd4ef842 chore: Release 2024-08-25 14:10:13 -04:00
Gerald Pinder
9ed47c0884 fix: Properly handle alt-tags so they don't collide with default tags 2024-08-25 14:08:39 -04:00
Gerald Pinder
04972416cb fix: Make sure GitHub job pushes latest image on scheduled job 2024-08-24 18:20:12 -04:00
Gerald Pinder
f13b67637b fix: Make sure getting version fails if not all dirs were copied 2024-08-20 09:53:59 -04:00
Gerald Pinder
e4ad31c047 chore: Release 2024-08-20 09:04:17 -04:00
Gerald Pinder
7418f60f8e fix: Don't let process continue running if the main app thread panics 2024-08-20 00:48:44 -04:00
Gerald Pinder
50ba091ed0 fix: Include $crate for macro calls 2024-08-15 22:25:02 -04:00
Gerald Pinder
8ce83ba7ff
refactor: Create SigningDriver and CiDriver (#197)
This also includes a new `login` command. The signing and CI logic is now using the Driver trait system along with a new experimental sigstore signing driver. New static macros have also been created to make implementation management easier for `Command` usage and `Driver` trait implementation calls.

---------

Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com>
2024-08-12 23:52:07 -04:00
Gerald Pinder
3ecb0d3d93 chore: Fix tag CI to build prebuild separately from main build 2024-08-11 12:06:31 -04:00
Gerald Pinder
7be5e00a31 chore: Release 2024-08-11 11:09:54 -04:00
Gerald Pinder
464fdf94a9 fix: Out of bounds panic when not retrying push 2024-08-11 10:37:17 -04:00
Gerald Pinder
82606cc144 fix: allow copying keys to both /etc and /usr/etc 2024-08-10 22:11:52 -04:00
fiftydinar
bd75880a03
chore: Move files from /usr/etc/ to /etc/ in build-time (#214)
Take a look at this issue for more details:

https://github.com/blue-build/modules/issues/314

Idk if anything else needs to be done, please tell

Should be tested for regressions too
2024-08-08 17:11:27 +00:00
Gerald Pinder
6a97a52da4 chore: Switch from askama to rinja 2024-08-03 11:21:45 -04:00
xyny
f89fa3f159
fix: add typespec schemas for cli modules, remove modules.json (not needed anymore) (#209)
The website build process now uses the GitHub API to generate a global
`modules.json`. If you decide to move the directory containing all the
modules, please tell me, or make a PR changing [this
line](9eb198c4e5/astro.config.mjs (L102)).
If you don't, I'll find out anyways, because the website builds will
break.

Also, whenever updating the modules, make sure the schema is updated too
to match the current state of the module. If you need help with writing
[TypeSpec](https://typespec.io/), consult me, but you probably wont,
since it's just a type system kind of like TypeScript's or Rust's .
2024-07-27 10:31:52 -04:00
Gerald Pinder
e36bb74231 fix: Builds failing due to new Rust version 2024-07-26 15:44:29 -04:00
Gerald Pinder
7481ac1825 chore: Fix integration tests failing 2024-07-24 15:18:49 -04:00
Gerald Pinder
431162beb1
chore: Add Justfile commands for easier development (#205) 2024-07-24 15:15:31 -04:00
Gerald Pinder
1d3e4e075e chore: Move files for test-repo to work with new files module update 2024-07-24 14:33:33 -04:00
Gerald Pinder
065fa193e3
refactor: Switch to using miette for errors instead of anyhow (#198)
Switch to a better error crate that will allow setting help texts for
any error we want.
2024-07-05 21:55:43 -04:00
Gerald Pinder
784be9869a
feat: Create RunDriver (#196)
This will be used for running containers for various tasks. There will
be a way to take all output from the process and a way to display output
from a running container like our builds have.
2024-07-05 19:20:38 -04:00
Gerald Pinder
1a348f8137 chore: Stop using secureblue for integration testing
This would occasionally cause tests to fail cause SecureBlue would rightfully make changes to their code. We shouldn't be relying on this anymore as it was a crutch to lean on when we were first starting this project
2024-06-30 16:57:11 -04:00
Gerald Pinder
7a563f42da
fix: Support other signals properly (#194) 2024-06-23 18:29:46 -04:00
Gerald Pinder
d0d51d5aa0 chore: Capitalize AS 2024-06-21 21:08:43 -04:00
Gerald Pinder
235b3b358c
fix: Add Ctrl-C handler for spawned children (#193)
This allows spawned children processes to be killed when a user performs
a Ctrl-C operation. Before this change, children processes would end up
continuing in the background with the user unaware.
2024-06-17 20:07:52 -04:00
Gerald Pinder
c12deec589 chore: Use proper out directory for installer image 2024-06-10 09:27:01 -04:00
Gerald Pinder
4ca98c1c2a
feat(experimental): Build multiple recipes in parallel (#182)
The `build` subcommand can now take in any number of recipe files and
will build them all in parallel. Along with this new ability, I've added
a way to easily distinguish which part of the build log belongs to which
recipe. Check out the `docker_build` action of this PR for an example.


![gif](https://gitlab.com/wunker-bunker/wunker-os/-/raw/main/bluebuild.gif)

## Tasks

- [x] Make build log follow same pattern as normal logs to keep things
consistent
- [x] Update color ranges based on @xynydev 's feedback
- [x] Deal with ANSI control characters in log output
- [x] Add [`indicatif`](https://crates.io/crates/indicatif) to make logs
look nicer
- [x] Add ability to print logs to a file
2024-06-07 17:52:26 -04:00
Gerald Pinder
18e48a34a4 chore: Checkout proper branch and build using cargo for buildah-build 2024-06-06 19:58:41 -04:00
Gerald Pinder
dcbccb602d chore: Build with priveleged 2024-06-04 14:20:06 -04:00
Gerald Pinder
6945915d4e
feat: Add arm support (#191)
This adds support for ARM based images and binaries.
2024-06-04 14:03:00 -04:00
Gerald Pinder
ea4b760805 chore: Add gh cli to just release 2024-06-03 09:59:53 -04:00
Gerald Pinder
4f235be4f7 chore: Release 2024-06-03 09:54:28 -04:00
Gerald Pinder
8aa874187c chore: Add external login job and buildah jobs 2024-06-03 09:10:51 -04:00
Gerald Pinder
aebaabfb2f fix: Move creds empty check to credentials module 2024-06-03 08:39:52 -04:00
Gerald Pinder
32e2ba35cf chore: Add registry for external login test 2024-06-02 18:17:11 -04:00
Gerald Pinder
bf52cdae35 chore: Add action to test external login 2024-06-02 18:10:27 -04:00
Gerald Pinder
e9c1df272e fix: Make sure username, password, and registry are not empty 2024-06-02 17:31:20 -04:00
Gerald Pinder
0b29929e93
fix: Fail if cosign private/public key can't be verified (#190) 2024-06-01 19:05:14 -04:00
Gerald Pinder
5e7524918f docs: Update README to put preferred method of installation higher up 2024-05-30 17:05:46 -04:00
Gerald Pinder
b2aff68741 chore: Release 2024-05-28 22:59:17 -04:00
Gerald Pinder
9dd1ec90f4
fix: Remove hard requirement for login creds to be able to push (#187)
Related to https://github.com/blue-build/github-action/issues/48
2024-05-28 22:56:06 -04:00
Gerald Pinder
02b2fe5434
refactor!: Rename template to generate and move rebase/upgrade under switch (#116)
This updates the `template` subcommand to be `generate`. The `template`
usage will continue to work as an alias to `generate`. A new `switch`
command is added that will manage both `rpm-ostree rebase` and
`rpm-ostree upgrade` and is fully replacing the respective subcommands
as a breaking change.

The new `switch` command is under the feature flag `switch` and will
currently only build for the `main` branch builds until it is moved as a
default feature (`v0.9.0`).

Closes #159
2024-05-26 22:47:34 -04:00
Gerald Pinder
968cf3db97 fix: Remove extra setup call 2024-05-18 15:55:21 -04:00
Gerald Pinder
5dfae14c32
fix: Allow both files or config directory to not exist (#185) 2024-05-18 14:34:54 +00:00
Gerald Pinder
ab87f6548d chore: Don't use satellites for integration tests 2024-05-18 09:28:13 -04:00
Gerald Pinder
8069006c03
feat: Stages (#173)
## Stages

A new property (`stages`) is being added to the recipe file schema. This
property will allow users to define a list of Containerfile stages each
with their own modules. Stages can be used to compile programs, perform
parallel operations, and copy the results into the final image without
contaminating the final image.

### Module Support

Currently the only modules that work out-of-the-box are `copy`,
`script`, `files`, and `containerfile`. Other modules are dependent on
the programs installed on the image. In order to better support some of
our essential modules, a setup script is ran at the start of each stage
that is not `scratch`. This script will install `curl`, `wget`, `bash`,
and `grep` and use the package manager for the detected distributions.

At this time, the following distributions are supported:

- Debian
- Ubuntu
- Fedora
- Alpine

Contributions to increase the size of this list is
[welcome](https://github.com/blue-build/cli)!

### Syntax

- **Required**
- `from` - The full image ref (image name + tag). This will be set in
the `FROM` statement of the stage.
- `name` - The name of the stage. This is used when referencing the
stage when using the `from:` property in the `copy` module.
- `modules` - The list of modules to execute. The exact same syntax used
by the main recipe `modules:` property.
- **Optional**
- `shell` - Allows a user to pass in an array of strings that are passed
directly into the [`SHELL`
instruction](https://docs.docker.com/reference/dockerfile/#shell).

#### Example

```yaml
stages:
- name: ubuntu-test
  from: ubuntu
  modules:
  - type: files
    files:
    - usr: /usr
  - type: script
    scripts:
    - example.sh
    snippets:
    - echo "test" > /test.txt
  - type: test-module
  - type: containerfile
    containerfiles:
    - labels
    snippets:
    - RUN echo "This is a snippet"
```

### Tasks
- [x] `from-file:` - Allows the user to store their stages in a separate
file so it can be included in multiple recipes
- [x] `no-cache:` - This will be useful for stages that want to pull the
latest changes from a git repo and not have to rely on the base image
getting an update for the build to be triggered again.
- [x] Add setup script to be able to install necessary programs to run
`bluebuild` modules in stages
- [x] Check for circular dependencies and error out

## `copy` module

This is a 1-1 for the [`COPY`
instruction](https://docs.docker.com/reference/dockerfile/#copy). It has
the ability to copy files between stages, making this a very important
addition to complete functionality for the stages feature. Each use of
this "module" will become its own layer.

### Decision to use `--link`

We use the `--link`
[option](https://docs.docker.com/reference/dockerfile/#benefits-of-using---link)
which allows that layer to have the same hash if the files haven't
changed regardless of if the previous instructions have changed. This
allows these layers to not have to be re-downloaded on the user's
computer if the copied files haven't changed.

### Syntax

- **Required**
- `src` - The source directory/file from the repo OR when `from:` is set
the image/stage that is specified.
  - `dest` - The destination directory/file inside the working image.
- **Optional**
  - `from` - The stage/image to copy from.

#### Example

```yaml
modules:
- type: copy
  from: ubuntu-test
  src: /test.txt
  dest: /
```

### Tasks
- [x] make `from:` optional
- [x] Add README.md and module.yml

## Feature gating

Gating this feature until we release for `v0.9.0`. The plan will be to
build all features (including this one) for main branch builds. This
means that these features will be available when using the `main` image
and consequently the `use_unstable_cli:` option on the GitHub Action.
All future `v0.9.0` features will be gated as well to allow for patches
to `v0.8`.

### Tasks
- [x] Build `--all-features` on non-tagged builds
- [x] Add stages and copy features
2024-05-18 13:23:50 +00:00