Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: adding Continuous integration (CI) workflow #38

Merged
merged 1 commit into from
Sep 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
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
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- 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
155 changes: 138 additions & 17 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 "/conventional_commits_linter"


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" "conventional_commits_linter/" "conventional_commits_linter_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 "conventional_commits_linter/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 All @@ -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
COPY "./ci" "./ci"
COPY "./conventional_commits_linter/end-to-end-tests" "./conventional_commits_linter/end-to-end-tests"
RUN pip3 install -r "./conventional_commits_linter/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 "./conventional_commits_linter/end-to-end-tests" AS LOCAL "./conventional_commits_linter/end-to-end-tests"
end-to-end-test:
FROM +python-base
RUN pip3 install -r "conventional_commits_linter/end-to-end-tests/requirements.txt"
COPY "+compile/target/" "target/"
RUN ./ci/end-to-end-test.sh
6 changes: 0 additions & 6 deletions ci/check-e2e-formatting.sh

This file was deleted.

6 changes: 6 additions & 0 deletions ci/check-python-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

find "conventional_commits_linter/end-to-end-tests/features/" -type f | grep "[.]py$" | xargs -I {} autopep8 --exit-code --diff --aggressive --aggressive --max-line-length 120 "{}"
6 changes: 6 additions & 0 deletions ci/check-rust-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

cargo fmt --all -- --check --config=group_imports=StdExternalCrate
8 changes: 8 additions & 0 deletions ci/check-rust-linting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

cargo clippy --verbose --workspace --all-targets -- -D warnings
cargo clippy --verbose --workspace --all-targets --all-features -- -D warnings
cargo clippy --verbose --workspace --all-targets --no-default-features -- -D warnings
6 changes: 6 additions & 0 deletions ci/check-shell-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

shfmt --simplify --diff ./ci/*
6 changes: 6 additions & 0 deletions ci/check-shell-linting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

shellcheck ci/*
6 changes: 6 additions & 0 deletions ci/check-yaml-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash

set -o errexit
set -o xtrace

yamlfmt -lint -dstar .github/**/*
8 changes: 8 additions & 0 deletions ci/compile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

cargo build --verbose --workspace
cargo build --verbose --workspace --all-features
cargo build --verbose --workspace --no-default-features
7 changes: 7 additions & 0 deletions ci/end-to-end-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

cd "conventional_commits_linter/end-to-end-tests/"
behave
6 changes: 0 additions & 6 deletions ci/fix-e2e-formatting.sh

This file was deleted.

6 changes: 6 additions & 0 deletions ci/fix-python-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

find "conventional_commits_linter/end-to-end-tests/features/" -type f | grep "[.]py$" | xargs -I {} autopep8 --in-place --aggressive --aggressive --max-line-length 120 "{}"
6 changes: 6 additions & 0 deletions ci/fix-rust-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

cargo fmt --all -- --config=group_imports=StdExternalCrate
6 changes: 6 additions & 0 deletions ci/fix-shell-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

shfmt --simplify --write ./ci/*
6 changes: 6 additions & 0 deletions ci/fix-yaml-formatting.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

yamlfmt -dstar ./github/**/*
8 changes: 8 additions & 0 deletions ci/unit-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env sh

set -o errexit
set -o xtrace

cargo test --verbose --workspace
cargo test --verbose --workspace --all-features
cargo test --verbose --workspace --no-default-features
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
'the flag --from-stdin is set and the standard input is "{standard_input}".')
def set_from_stdin(context, standard_input):
context.standard_input = standard_input.strip()
context.pre_command = f"echo {context.standard_input} | "
context.pre_command = f"echo -e {context.standard_input} | "
context.arguments += " --from-stdin "
# Testing we use stdin when not in a Git repository.
# https://gitlab.com/DeveloperC/conventional_commits_linter/-/issues/3
Expand Down
Loading