Skip to content

Commit

Permalink
ci: adding Continuous integration (CI) workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
DeveloperC286 committed Sep 4, 2024
1 parent 0e64a8f commit 1068fb4
Show file tree
Hide file tree
Showing 19 changed files with 457 additions and 17 deletions.
65 changes: 65 additions & 0 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Continuous Integration (CI)

on: pull_request

env:
# Forcing Earthly to use colours, to make reading output easier.
FORCE_COLOR: 1

jobs:
formatting:
name: Formatting
runs-on: ubuntu-latest
strategy:
matrix:
language: [rust, python, shell, yaml]
steps:
- name: Download Earthly v0.8.12.
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.12/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Checkout code.
uses: actions/checkout@v3
- name: Check formatting.
run: earthly --ci +check-${{ matrix.language }}-formatting
linting:
name: Linting
runs-on: ubuntu-latest
strategy:
matrix:
language: [rust, shell]
steps:
- name: Download Earthly v0.8.12.
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.12/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Checkout code.
uses: actions/checkout@v3
- name: Check linting.
run: earthly --ci +check-${{ matrix.language }}-linting
compile:
name: Compile
runs-on: ubuntu-latest
steps:
- name: Download Earthly v0.8.12.
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.12/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Checkout code.
uses: actions/checkout@v3
- name: Compile.
run: earthly --ci +compile
unit-test:
name: Unit Test
runs-on: ubuntu-latest
steps:
- name: Download Earthly v0.8.12.
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.12/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Checkout code.
uses: actions/checkout@v3
- name: Unit test.
run: earthly --ci +unit-test
end-to-end-test:
name: End to End Test
runs-on: ubuntu-latest
steps:
- name: Download Earthly v0.8.12.
run: "sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.8.12/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'"
- name: Checkout code.
uses: actions/checkout@v3
- name: End to End test.
run: earthly --ci +end-to-end-test
3 changes: 3 additions & 0 deletions .yamlfmt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
formatter:
type: basic
retain_line_breaks: true
125 changes: 120 additions & 5 deletions Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ COPY_METADATA:


rust-base:
FROM rust:1.70.0
FROM rust:1.70.0-alpine3.18
RUN apk add --no-cache musl-dev bash
WORKDIR "/clean_git_history"


check-clean-git-history:
Expand All @@ -32,12 +34,125 @@ check-conventional-commits-linting:
RUN ./ci/check-conventional-commits-linting.sh --from-reference "${from_reference}"


COPY_SOURCECODE:
COMMAND
DO +COPY_CI_DATA
COPY --if-exists "Cargo.lock" "./"
COPY --dir "Cargo.toml" "clean_git_history/" "clean_git_history_lib/" "./"

Check failure on line 41 in Earthfile

View workflow job for this annotation

GitHub Actions / Formatting (rust)

Error

The command COPY --dir Cargo.toml clean_git_history/ clean_git_history_lib/ ./ failed: "/clean_git_history_lib": not found

Check failure on line 41 in Earthfile

View workflow job for this annotation

GitHub Actions / Linting (rust)

Error

The command COPY --dir Cargo.toml clean_git_history/ clean_git_history_lib/ ./ failed: "/clean_git_history_lib": not found


rust-formatting-base:
FROM +rust-base
RUN rustup component add rustfmt
DO +COPY_SOURCECODE


check-rust-formatting:
FROM +rust-formatting-base
RUN ./ci/check-rust-formatting.sh


python-base:
FROM python:3.9.19-alpine
RUN apk add --no-cache git bash
WORKDIR "/consistent_whitespace"
DO +COPY_SOURCECODE


python-formatting-base:
FROM +python-base
RUN pip3 install -r "clean_git_history/end-to-end-tests/autopep8.requirements.txt"


check-python-formatting:
FROM +python-formatting-base
RUN ./ci/check-python-formatting.sh


golang-base:
FROM golang:1.22.1
ENV GOPROXY=direct
ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOARCH=amd64
WORKDIR "/consistent_whitespace"


shell-formatting-base:
FROM +golang-base
RUN go install mvdan.cc/sh/v3/cmd/[email protected]
DO +COPY_CI_DATA


check-shell-formatting:
FROM +shell-formatting-base
RUN ./ci/check-shell-formatting.sh


yaml-formatting-base:
FROM +golang-base
RUN go install github.com/google/yamlfmt/cmd/[email protected]
COPY ".yamlfmt" "./"
DO +COPY_CI_DATA


check-yaml-formatting:
FROM +yaml-formatting-base
RUN ./ci/check-yaml-formatting.sh


check-formatting:
BUILD +check-rust-formatting
BUILD +check-python-formatting
BUILD +check-shell-formatting
BUILD +check-yaml-formatting


fix-rust-formatting:
FROM +rust-formatting-base
RUN ./ci/fix-rust-formatting.sh
SAVE ARTIFACT "src/" AS LOCAL "./"


fix-python-formatting:
FROM +python-formatting-base
RUN ./ci/fix-python-formatting.sh
SAVE ARTIFACT "end-to-end-tests/" AS LOCAL "./"


fix-shell-formatting:
FROM +shell-formatting-base
RUN ./ci/fix-shell-formatting.sh
SAVE ARTIFACT "ci/" AS LOCAL "./"


fix-yaml-formatting:
FROM +yaml-formatting-base
RUN ./ci/fix-yaml-formatting.sh
SAVE ARTIFACT ".github/" AS LOCAL "./"


fix-formatting:
BUILD +fix-rust-formatting
BUILD +fix-python-formatting
BUILD +fix-shell-formatting
BUILD +fix-yaml-formatting


check-rust-linting:
FROM +rust-base
RUN rustup component add clippy
DO +COPY_SOURCECODE
RUN ./ci/check-rust-linting.sh


ubuntu-base:
FROM ubuntu:22.04
# https://askubuntu.com/questions/462690/what-does-apt-get-fix-missing-do-and-when-is-it-useful
RUN apt-get update --fix-missing


check-shell-linting:
FROM +ubuntu-base
RUN apt-get install shellcheck -y
DO +COPY_CI_DATA
RUN ./ci/check-shell-linting.sh


check-github-actions-workflows-linting:
Expand Down
184 changes: 184 additions & 0 deletions Earthfile.rej
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
--- Earthfile
+++ Earthfile
@@ -13,7 +13,9 @@ COPY_METADATA:


rust-base:
- FROM rust:1.70.0
+ FROM rust:1.70.0-alpine3.18
+ RUN apk add --no-cache musl-dev bash
+ WORKDIR "/clean_git_history"


check-clean-git-history:
@@ -32,12 +34,125 @@ check-conventional-commits-linting:
RUN ./ci/check-conventional-commits-linting.sh --from-reference "${from_reference}"


+COPY_SOURCECODE:
+ COMMAND
+ DO +COPY_CI_DATA
+ COPY --if-exists "Cargo.lock" "./"
+ COPY --dir "Cargo.toml" "clean_git_history/" "clean_git_history_lib/" "./"
+
+
+rust-formatting-base:
+ FROM +rust-base
+ RUN rustup component add rustfmt
+ DO +COPY_SOURCECODE
+
+
+check-rust-formatting:
+ FROM +rust-formatting-base
+ RUN ./ci/check-rust-formatting.sh
+
+
+python-base:
+ FROM python:3.9.19-alpine
+ RUN apk add --no-cache git bash
+ WORKDIR "/consistent_whitespace"
+ DO +COPY_SOURCECODE
+
+
+python-formatting-base:
+ FROM +python-base
+ RUN pip3 install -r "clean_git_history/end-to-end-tests/autopep8.requirements.txt"
+
+
+check-python-formatting:
+ FROM +python-formatting-base
+ RUN ./ci/check-python-formatting.sh
+
+
golang-base:
FROM golang:1.22.1
- ENV GOPROXY=direct
- ENV CGO_ENABLED=0
- ENV GOOS=linux
- ENV GOARCH=amd64
+ WORKDIR "/consistent_whitespace"
+
+
+shell-formatting-base:
+ FROM +golang-base
+ RUN go install mvdan.cc/sh/v3/cmd/[email protected]
+ DO +COPY_CI_DATA
+
+
+check-shell-formatting:
+ FROM +shell-formatting-base
+ RUN ./ci/check-shell-formatting.sh
+
+
+yaml-formatting-base:
+ FROM +golang-base
+ RUN go install github.com/google/yamlfmt/cmd/[email protected]
+ COPY ".yamlfmt" "./"
+ DO +COPY_CI_DATA
+
+
+check-yaml-formatting:
+ FROM +yaml-formatting-base
+ RUN ./ci/check-yaml-formatting.sh
+
+
+check-formatting:
+ BUILD +check-rust-formatting
+ BUILD +check-python-formatting
+ BUILD +check-shell-formatting
+ BUILD +check-yaml-formatting
+
+
+fix-rust-formatting:
+ FROM +rust-formatting-base
+ RUN ./ci/fix-rust-formatting.sh
+ SAVE ARTIFACT "src/" AS LOCAL "./"
+
+
+fix-python-formatting:
+ FROM +python-formatting-base
+ RUN ./ci/fix-python-formatting.sh
+ SAVE ARTIFACT "end-to-end-tests/" AS LOCAL "./"
+
+
+fix-shell-formatting:
+ FROM +shell-formatting-base
+ RUN ./ci/fix-shell-formatting.sh
+ SAVE ARTIFACT "ci/" AS LOCAL "./"
+
+
+fix-yaml-formatting:
+ FROM +yaml-formatting-base
+ RUN ./ci/fix-yaml-formatting.sh
+ SAVE ARTIFACT ".github/" AS LOCAL "./"
+
+
+fix-formatting:
+ BUILD +fix-rust-formatting
+ BUILD +fix-python-formatting
+ BUILD +fix-shell-formatting
+ BUILD +fix-yaml-formatting
+
+
+check-rust-linting:
+ FROM +rust-base
+ RUN rustup component add clippy
+ DO +COPY_SOURCECODE
+ RUN ./ci/check-rust-linting.sh
+
+
+ubuntu-base:
+ FROM ubuntu:22.04
+ # https://askubuntu.com/questions/462690/what-does-apt-get-fix-missing-do-and-when-is-it-useful
+ RUN apt-get update --fix-missing
+
+
+check-shell-linting:
+ FROM +ubuntu-base
+ RUN apt-get install shellcheck -y
+ DO +COPY_CI_DATA
+ RUN ./ci/check-shell-linting.sh


check-github-actions-workflows-linting:
@@ -48,22 +163,28 @@ check-github-actions-workflows-linting:


check-linting:
+ BUILD +check-rust-linting
+ BUILD +check-shell-linting
BUILD +check-github-actions-workflows-linting


-e2e-formatting-base:
- FROM python:3.12.0-slim
- DO +COPY_CI_DATA
- COPY "clean_git_history/end-to-end-tests/" "./"
- RUN pip3 install -r "./clean_git_history/end-to-end-tests/autopep8.requirements.txt"
+compile:
+ FROM +rust-base
+ DO +COPY_SOURCECODE
+ RUN ./ci/compile.sh
+ SAVE ARTIFACT "target/" AS LOCAL "./"
+ SAVE ARTIFACT "Cargo.lock" AS LOCAL "./"


-check-e2e-formatting:
- FROM +e2e-formatting-base
- RUN ./ci/check-e2e-formatting.sh
+unit-test:
+ FROM +rust-base
+ DO +COPY_METADATA
+ DO +COPY_SOURCECODE
+ RUN ./ci/unit-test.sh


-fix-e2e-formatting:
- FROM +e2e-formatting-base
- RUN ./ci/fix-e2e-formatting.sh
- SAVE ARTIFACT "clean_git_history/end-to-end-tests/" AS LOCAL "./"
+end-to-end-test:
+ FROM +python-base
+ RUN pip3 install -r "clean_git_history/end-to-end-tests/requirements.txt"
+ COPY "+compile/target/" "target/"
+ RUN ./ci/end-to-end-test.sh
Loading

0 comments on commit 1068fb4

Please sign in to comment.