scuffle icon indicating copy to clipboard operation
scuffle copied to clipboard

CI System

Open TroyKomodo opened this issue 6 months ago • 0 comments

Tell us about your Wish

Create/Find a CI System that fixes a lot of the pitfalls with GH Actions.

  • IPv6 Support

Currently GH Actions does not support IPv6

  • Approving Runs

Currently every PR auto runs CI Jobs. Which is annoying as PRs who are in development with rapid commits don't need CI on every commit.

  • Docker container command support

GH Actions does not support passing a command to the containers which means we have to make mirrors of the containers and then add an entrypoint which consumes an env variable to pass args to containers.

  • GitHub Caching Limits (10GB)

A 10GB cache is way too small. A single build caches at around ~8GB. GitHub's cache also uses a single threaded gz implementation so compressing build artifacts takes AGES.

  • Deduplicating Runs

If you have a rule that compiles code on a branch like feature/* and then you have a PR from that branch onto main the CI system runs on both the PR and the BRANCH meaning every commit gets 2 CI runs of the exact same thing. I understand this might be benificial if you have rules which are only run when its a branch or rules that are only run when its a PR. However typically this is not the case. There MUST be a better solution to this.

  • Step Matrix

Sometimes we want a single job to run multiple commands in order but the commands are very similar (like uploading multiple files), it would be much easier to have some step level matrix, GH Actions only supports job level matrix.

  • Cross file job depends

In GitHub actions ci runs dissolve into a single long file because GitHub had no way of importing runs from different files. We should be able to depend on jobs on different files (like namespaces jobs).

# scuffle-ci.yml

workspace:
- ./lint.yml
- ./test.yml
- ./build.yml

--- 
# lint.yml

module: lint

jobs:
  - name: lint
    steps:
      ...

--- 
# test.yml

module: test

jobs:
  - name: test
    steps:
      ...

--- 
# build.yml

module: build

jobs:
  - name: build
    depends_on:
      - .lint # (all jobs in lint)
      - .test.test # (only the test job in test) 
    steps:
      ...
  • Inlined Jobs

Advancing on the above feature we could have jobs which can use things from a previous job without pushing the state to a cache or a store or anything (simply passing a volume to the next step)

Is your feature related to a bug

No response

Additional Info

We can add more features as we think of them. But all current ci solutions basically suck balls.

Participation

  • [ ] I am willing to submit a pull request to implement this

TroyKomodo avatar Jan 02 '24 17:01 TroyKomodo