diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 69806f1..28d3873 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -16,6 +16,10 @@ jobs: changelog: CHANGELOG.md # (Optional) Create a draft release. # [default value: false] - draft: true + draft: false # (Required) GitHub token for creating GitHub Releases. token: ${{ secrets.GITHUB_TOKEN }} + - name: Update rust toolchain + run: rustup update stable && rustup default stable + - name: Run dagger [RELEASE] + run: cargo run -p ci -- release --version="${{github.ref_name}}" diff --git a/ci/src/main.rs b/ci/src/main.rs index 36370b8..03e747a 100644 --- a/ci/src/main.rs +++ b/ci/src/main.rs @@ -8,6 +8,10 @@ fn main() -> eyre::Result<()> { let matches = clap::Command::new("ci") .subcommand_required(true) .subcommand(clap::Command::new("pr")) + .subcommand( + clap::Command::new("release") + .arg(clap::Arg::new("version").long("version").required(true)), + ) .get_matches(); let client = dagger_sdk::client::connect()?; @@ -16,6 +20,7 @@ fn main() -> eyre::Result<()> { match matches.subcommand() { Some(("pr", _)) => return validate_pr(client, base), + Some(("release", subm)) => return release(client, base, subm), Some(_) => { panic!("invalid subcommand selected!") } @@ -25,6 +30,63 @@ fn main() -> eyre::Result<()> { } } +fn release( + client: Arc, + base: Container, + subm: &clap::ArgMatches, +) -> Result<(), color_eyre::Report> { + let version = subm.get_one::("version").unwrap(); + + let container = base + .with_exec( + vec!["cargo".into(), "install".into(), "cargo-release".into()], + None, + ) + .with_exec( + vec![ + "cargo".into(), + "release".into(), + "version".into(), + "--workspace".into(), + "--execute".into(), + "--no-confirm".into(), + version.clone(), + ], + None, + ) + .with_exec( + vec![ + "cargo".into(), + "release".into(), + "replace".into(), + "--workspace".into(), + "--execute".into(), + "--no-confirm".into(), + ], + None, + ) + .with_exec( + vec![ + "cargo".into(), + "release".into(), + "publish".into(), + "--workspace".into(), + "--execute".into(), + "--no-verify".into(), + "--no-confirm".into(), + ], + None, + ); + let exit = container.exit_code(); + if exit != 0 { + eyre::bail!("container failed with non-zero exit code"); + } + + println!("validating pr succeeded!"); + + Ok(()) +} + fn get_dependencies(client: Arc) -> Container { let cargo_dir = client.host().directory( ".".into(),