ScuffleTV / scuffle

Live streaming platform
https://scuffle.tv
224 stars 25 forks source link

CI System #178

Open TroyKomodo opened 6 months ago

TroyKomodo commented 6 months ago

Tell us about your Wish

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

Currently GH Actions does not support IPv6

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.

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.

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.

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.

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.

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:
      ...

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