Skip to content

Commit f8f0d58

Browse files
committed
feat: add gh-workflow-tailcall
1 parent 8aa50a2 commit f8f0d58

File tree

6 files changed

+150
-1
lines changed

6 files changed

+150
-1
lines changed

Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
[workspace]
2-
edition = "2021"
32
resolver = "2"
43
members = ["crates/*"]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[package]
2+
name = "gh-workflow-tailcall"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
7+
description = "macros for gh-workflow"
8+
license = "Apache-2.0"
9+
documentation = "https://docs.rs/gh-workflow"
10+
homepage = "https://github.com/tailcallhq/gh-workflow"
11+
repository = "https://github.com/tailcallhq/gh-workflow"
12+
keywords = ["github", "actions", "workflow", "generator"]
13+
14+
[dependencies]
15+
derive_setters = { version = "0.1.6" }
16+
gh-workflow = { path = "../gh-workflow", version = "0.5.1" }
17+
18+
[dev-dependencies]
19+
insta = "1.40.0"
20+
pretty_assertions = "1.4.1"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
mod workflow;
2+
3+
pub use workflow::*;
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
//! Workflow for all tailcall projects free and open source for everyone.
2+
3+
use ctx::Context;
4+
use derive_setters::Setters;
5+
use gh_workflow::*;
6+
use release_plz::{Command, Release};
7+
use toolchain::Toolchain;
8+
9+
#[derive(Default, Debug, Clone, Setters)]
10+
pub struct TailcallWorkflow {
11+
pub release: bool,
12+
}
13+
14+
impl TailcallWorkflow {}
15+
16+
impl From<TailcallWorkflow> for Workflow {
17+
fn from(value: TailcallWorkflow) -> Self {
18+
let flags = RustFlags::deny("warnings");
19+
20+
let event = Event::default()
21+
.push(Push::default().add_branch("main"))
22+
.pull_request(
23+
PullRequest::default()
24+
.add_type(PullRequestType::Opened)
25+
.add_type(PullRequestType::Synchronize)
26+
.add_type(PullRequestType::Reopened)
27+
.add_branch("main"),
28+
);
29+
30+
let is_main = Context::github().ref_().eq("refs/heads/main".into());
31+
let is_push = Context::github().event_name().eq("push".into());
32+
let cond = is_main.and(is_push);
33+
34+
// Jobs
35+
let build = build_and_test();
36+
let mut workflow = Workflow::new("CI")
37+
.add_env(flags)
38+
.on(event)
39+
.add_job("build", build.clone());
40+
41+
if value.release {
42+
let permissions = Permissions::default()
43+
.pull_requests(Level::Write)
44+
.packages(Level::Write)
45+
.contents(Level::Write);
46+
47+
let release = release_job(&cond, &build, &permissions);
48+
let release_pr = release_pr_job(cond, &build, permissions);
49+
workflow = workflow
50+
.add_job("release", release)
51+
.add_job("release-pr", release_pr);
52+
}
53+
54+
workflow
55+
}
56+
}
57+
58+
fn release_pr_job(cond: Context<bool>, build: &Job, permissions: Permissions) -> Job {
59+
Job::new("Release PR")
60+
.cond(cond.clone())
61+
.concurrency(
62+
Concurrency::new(Expression::new("release-${{github.ref}}")).cancel_in_progress(false),
63+
)
64+
.add_needs(build.clone())
65+
.add_env(Env::github())
66+
.add_env(Env::new(
67+
"CARGO_REGISTRY_TOKEN",
68+
"${{ secrets.CARGO_REGISTRY_TOKEN }}",
69+
))
70+
.permissions(permissions)
71+
.add_step(Step::checkout())
72+
.add_step(Release::default().command(Command::ReleasePR))
73+
}
74+
75+
fn release_job(cond: &Context<bool>, build: &Job, permissions: &Permissions) -> Job {
76+
Job::new("Release")
77+
.cond(cond.clone())
78+
.add_needs(build.clone())
79+
.add_env(Env::github())
80+
.add_env(Env::new(
81+
"CARGO_REGISTRY_TOKEN",
82+
"${{ secrets.CARGO_REGISTRY_TOKEN }}",
83+
))
84+
.permissions(permissions.clone())
85+
.add_step(Step::checkout())
86+
.add_step(Release::default().command(Command::Release))
87+
}
88+
89+
fn build_and_test() -> Job {
90+
Job::new("Build and Test")
91+
.permissions(Permissions::default().contents(Level::Read))
92+
.add_step(Step::checkout())
93+
.add_step(
94+
Toolchain::default()
95+
.add_stable()
96+
.add_nightly()
97+
.add_clippy()
98+
.add_fmt(),
99+
)
100+
.add_step(
101+
Cargo::new("test")
102+
.args("--all-features --workspace")
103+
.name("Cargo Test"),
104+
)
105+
.add_step(
106+
Cargo::new("fmt")
107+
.nightly()
108+
.args("--check")
109+
.name("Cargo Fmt"),
110+
)
111+
.add_step(
112+
Cargo::new("clippy")
113+
.nightly()
114+
.args("--all-features --workspace -- -D warnings")
115+
.name("Cargo Clippy"),
116+
)
117+
}
File renamed without changes.

0 commit comments

Comments
 (0)