Skip to content

Commit

Permalink
Generate GH Action CI automatically (#6)
Browse files Browse the repository at this point in the history
* add ci feat

* clean

* clean
  • Loading branch information
ysawa0 authored Nov 6, 2023
1 parent f4a95b1 commit dcfe669
Show file tree
Hide file tree
Showing 7 changed files with 256 additions and 45 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ jobs:
with:
path: |
target
# key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
key: ${{ runner.os }}-cargo-
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
# key: ${{ runner.os }}-cargo-
restore-keys: |
${{ runner.os }}-cargo-
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ repos:
- javascript
- yaml
- markdown
exclude: templates/.pre-commit-config.yaml
exclude: templates/.pre-commit-config.yaml|templates/.github/workflows/ci.yaml

#############################################################################
# Rust
Expand Down
83 changes: 83 additions & 0 deletions example/.github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: CI

on:
pull_request: # Start the job on all PRs
branches: [master, main]
types: [synchronize, opened, reopened, ready_for_review]
push: # Start the job on all main branch push
branches: [master, main]

jobs:
precommit:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.10"

- name: Cache pip dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-
restore-keys: |
${{ runner.os }}-pip-
- name: Cache shfmt binary
uses: actions/cache@v3
with:
path: /usr/local/bin/shfmt
# key: ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }}
key: ${{ runner.os }}-shfmt-
restore-keys: |
${{ runner.os }}-shfmt-
- name: Cache Pre-Commit environments
uses: actions/cache@v3
with:
path: ~/.cache/pre-commit
# key: ${{ runner.os }}-pc-${{ hashFiles('.pre-commit-config.yaml') }}
key: ${{ runner.os }}-pc-
restore-keys: |
${{ runner.os }}-pc-
- name: Install dependencies
run: |
python -m pip install pre-commit
pre-commit install
- name: Install shfmt
run: |
SHFMT_VERSION="v3.7.0"
SHFMT_BIN="shfmt_${SHFMT_VERSION}_linux_amd64"
if [[ ! -f /usr/local/bin/shfmt ]]; then
wget -O shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/${SHFMT_BIN}"
chmod +x shfmt
sudo mv shfmt /usr/local/bin/
fi
sudo apt-get install shellcheck
- name: Run pre-commits
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
REPO_NAME=$(echo $GITHUB_REPOSITORY | sed 's/^.*\///')
DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/$GITHUB_REPOSITORY" | jq -r '.default_branch')
git fetch
CUR_SHA=$(git log --pretty=tformat:"%H" -n1 . | tail -n1)
echo "Default branch is $DEFAULT_BRANCH"
echo "Current SHA is $CUR_SHA"
if [[ $GITHUB_REF == "refs/heads/$DEFAULT_BRANCH" ]]; then
pre-commit run --all
else
pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref $CUR_SHA
fi
62 changes: 62 additions & 0 deletions example/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
[tool.poetry]
name = "example"
version = "0.0.1"
description = ""
authors = [
"My Name <[email protected]>"
]
license = ""

[build-system]
requires = ["poetry-core>=1.7.0"]
build-backend = "poetry.core.masonry.api"

[tool.black]
line-length = 120
skip-string-normalization = false
target-version = ['py310']
include = '\.pyi?$'
exclude = '''
/(
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
| dist
)/
'''
color = true

[tool.isort]
balanced_wrapping = true
include_trailing_comma = true
known_first_party = "example"
known_third_party = [
"boto3", # Common for AWS
"django", # Common web framework, if used
"flask", # Common web framework, if used
"jinja2", # Common templating engine
"matplotlib", # Common for plotting
"numpy", # Common for numerical operations
"pandas", # Common for data manipulation
"pendulum", # Common for date time
"pytest", # Common for testing
"requests", # Common for HTTP requests
"sqlalchemy", # Common ORM for databases
]
multi_line_output = 3
profile = "black"
line_length = 120

[tool.poetry.dependencies]
python = "^3.10"

[tool.poetry.group.dev.dependencies]
pre-commit = ">=3.5.0"
pytest = "^7.3.1"
pytest-cov = "^4.1.0"
6 changes: 6 additions & 0 deletions rustfmt.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
max_width = 120
imports_granularity = "Crate"
group_imports = "StdExternalCrate"
imports_layout = "Horizontal"

comment_width = 200
59 changes: 17 additions & 42 deletions src/python.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ struct Flake8 {}
#[template(path = ".cpa/prettier.json", escape = "none")]
struct Prettier {}

#[derive(Template)]
#[template(path = ".github/workflows/ci.yaml", escape = "none")]
struct GHWorkflowCI {}

pub fn setup_preset(mut preset: String, name: String, create: bool) {
if preset == "python" {
preset = "python3.10".to_string();
Expand All @@ -54,40 +58,26 @@ pub fn setup_preset(mut preset: String, name: String, create: bool) {
}

let _ = fs::create_dir_all(format!("{}/.cpa", prefix));

// Render Github Actions CI
let _ = fs::create_dir_all(format!("{}/.github/workflows", prefix));
File::create(format!("{}/.github/workflows/ci.yaml", prefix))
.and_then(|mut file| file.write_all(GHWorkflowCI {}.render().expect("Failed to render ci.yaml").as_bytes()))
.expect("Failed to create or write to ci.yaml");

// Render .gitignore
File::create(format!("{}/.gitignore", prefix))
.and_then(|mut file| {
file.write_all(
GitIgnore {}
.render()
.expect("Failed to render .gitignore")
.as_bytes(),
)
})
.and_then(|mut file| file.write_all(GitIgnore {}.render().expect("Failed to render .gitignore").as_bytes()))
.expect("Failed to create or write to .gitignore");

// Render Makefile
File::create(format!("{}/Makefile", prefix))
.and_then(|mut file| {
file.write_all(
Makefile {}
.render()
.expect("Failed to render Makefile")
.as_bytes(),
)
})
.and_then(|mut file| file.write_all(Makefile {}.render().expect("Failed to render Makefile").as_bytes()))
.expect("Failed to create or write to Makefile");

// Render Dockerfile
File::create(format!("{}/Dockerfile", prefix))
.and_then(|mut file| {
file.write_all(
Dockerfile {}
.render()
.expect("Failed to render Dockerfile")
.as_bytes(),
)
})
.and_then(|mut file| file.write_all(Dockerfile {}.render().expect("Failed to render Dockerfile").as_bytes()))
.expect("Failed to create or write to Dockerfile");

// Render main.py
Expand All @@ -109,26 +99,12 @@ pub fn setup_preset(mut preset: String, name: String, create: bool) {

// Render Flake8 conf
File::create(format!("{}/.cpa/flake8.cfg", prefix))
.and_then(|mut file| {
file.write_all(
Flake8 {}
.render()
.expect("Failed to render flake8.cfg")
.as_bytes(),
)
})
.and_then(|mut file| file.write_all(Flake8 {}.render().expect("Failed to render flake8.cfg").as_bytes()))
.expect("Failed to create or write to flake8.cfg");

// Render Prettier conf
File::create(format!("{}/.cpa/prettier.json", prefix))
.and_then(|mut file| {
file.write_all(
Prettier {}
.render()
.expect("Failed to render prettier.json")
.as_bytes(),
)
})
.and_then(|mut file| file.write_all(Prettier {}.render().expect("Failed to render prettier.json").as_bytes()))
.expect("Failed to create or write to prettier.json");

// Render Poetry conf
Expand All @@ -147,8 +123,7 @@ pub fn setup_preset(mut preset: String, name: String, create: bool) {
black_target_ver,
};
let out_pyproj: String = pyproj.render().expect("Failed to render");
let mut f_pyproj =
File::create(format!("{}/pyproject.toml", prefix)).expect("Could not create file");
let mut f_pyproj = File::create(format!("{}/pyproject.toml", prefix)).expect("Could not create file");
f_pyproj
.write_all(out_pyproj.as_bytes())
.expect("Could not write to file");
Expand Down
85 changes: 85 additions & 0 deletions templates/.github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
{% raw %}
name: CI

on:
pull_request: # Start the job on all PRs
branches: [master, main]
types: [synchronize, opened, reopened, ready_for_review]
push: # Start the job on all main branch push
branches: [master, main]

jobs:
precommit:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.10"

- name: Cache pip dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-
restore-keys: |
${{ runner.os }}-pip-
- name: Cache shfmt binary
uses: actions/cache@v3
with:
path: /usr/local/bin/shfmt
# key: ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }}
key: ${{ runner.os }}-shfmt-
restore-keys: |
${{ runner.os }}-shfmt-
- name: Cache Pre-Commit environments
uses: actions/cache@v3
with:
path: ~/.cache/pre-commit
# key: ${{ runner.os }}-pc-${{ hashFiles('.pre-commit-config.yaml') }}
key: ${{ runner.os }}-pc-
restore-keys: |
${{ runner.os }}-pc-
- name: Install dependencies
run: |
python -m pip install pre-commit
pre-commit install
- name: Install shfmt
run: |
SHFMT_VERSION="v3.7.0"
SHFMT_BIN="shfmt_${SHFMT_VERSION}_linux_amd64"
if [[ ! -f /usr/local/bin/shfmt ]]; then
wget -O shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/${SHFMT_BIN}"
chmod +x shfmt
sudo mv shfmt /usr/local/bin/
fi
sudo apt-get install shellcheck
- name: Run pre-commits
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
REPO_NAME=$(echo $GITHUB_REPOSITORY | sed 's/^.*\///')
DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/$GITHUB_REPOSITORY" | jq -r '.default_branch')
git fetch
CUR_SHA=$(git log --pretty=tformat:"%H" -n1 . | tail -n1)
echo "Default branch is $DEFAULT_BRANCH"
echo "Current SHA is $CUR_SHA"
if [[ $GITHUB_REF == "refs/heads/$DEFAULT_BRANCH" ]]; then
pre-commit run --all
else
pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref $CUR_SHA
fi
{% endraw %}

0 comments on commit dcfe669

Please sign in to comment.