mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-09-04 19:56:30 +00:00
Merge pull request #5823 from meilisearch/ci-open-api
Add CI to publish OpenAPI file
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
name: Publish binaries to GitHub release
|
name: Publish assets to GitHub release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
@ -184,3 +184,28 @@ jobs:
|
|||||||
file: target/${{ matrix.target }}/release/meilisearch
|
file: target/${{ matrix.target }}/release/meilisearch
|
||||||
asset_name: ${{ matrix.asset_name }}
|
asset_name: ${{ matrix.asset_name }}
|
||||||
tag: ${{ github.ref }}
|
tag: ${{ github.ref }}
|
||||||
|
|
||||||
|
publish-openapi-file:
|
||||||
|
name: Publish OpenAPI file
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Setup Rust
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
- name: Generate OpenAPI file
|
||||||
|
run: |
|
||||||
|
cd crates/openapi-generator
|
||||||
|
cargo run --release -- --pretty --output ../../meilisearch.json
|
||||||
|
- name: Upload OpenAPI to Release
|
||||||
|
# No need to upload for dry run (cron)
|
||||||
|
if: github.event_name == 'release'
|
||||||
|
uses: svenstaro/upload-release-action@2.11.2
|
||||||
|
with:
|
||||||
|
repo_token: ${{ secrets.MEILI_BOT_GH_PAT }}
|
||||||
|
file: ./meilisearch.json
|
||||||
|
asset_name: meilisearch-openapi.json
|
||||||
|
tag: ${{ github.ref }}
|
@ -107,12 +107,18 @@ Run `cargo xtask --help` from the root of the repository to find out what is ava
|
|||||||
|
|
||||||
To update the openAPI file in the code, see [sprint_issue.md](https://github.com/meilisearch/meilisearch/blob/main/.github/ISSUE_TEMPLATE/sprint_issue.md#reminders-when-modifying-the-api).
|
To update the openAPI file in the code, see [sprint_issue.md](https://github.com/meilisearch/meilisearch/blob/main/.github/ISSUE_TEMPLATE/sprint_issue.md#reminders-when-modifying-the-api).
|
||||||
|
|
||||||
If you want to update the openAPI file on the [open-api repository](https://github.com/meilisearch/open-api):
|
If you want to generate OpenAPI file manually:
|
||||||
- Pull the latest version of the latest rc of Meilisearch `git checkout release-vX.Y.Z; git pull`
|
|
||||||
|
With swagger:
|
||||||
- Starts Meilisearch with the `swagger` feature flag: `cargo run --features swagger`
|
- Starts Meilisearch with the `swagger` feature flag: `cargo run --features swagger`
|
||||||
- On a browser, open the following URL: http://localhost:7700/scalar
|
- On a browser, open the following URL: http://localhost:7700/scalar
|
||||||
- Click the « Download openAPI file »
|
- Click the « Download openAPI file »
|
||||||
- Open a PR replacing [this file](https://github.com/meilisearch/open-api/blob/main/open-api.json) with the one downloaded
|
|
||||||
|
With the internal crate:
|
||||||
|
```bash
|
||||||
|
cd crates/openapi-generator
|
||||||
|
cargo run --release -- --pretty --output meilisearch.json
|
||||||
|
```
|
||||||
|
|
||||||
### Logging
|
### Logging
|
||||||
|
|
||||||
|
11
Cargo.lock
generated
11
Cargo.lock
generated
@ -4338,6 +4338,17 @@ version = "11.1.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
|
checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "openapi-generator"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"clap",
|
||||||
|
"meilisearch",
|
||||||
|
"serde_json",
|
||||||
|
"utoipa",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-probe"
|
name = "openssl-probe"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
|
@ -19,6 +19,7 @@ members = [
|
|||||||
"crates/tracing-trace",
|
"crates/tracing-trace",
|
||||||
"crates/xtask",
|
"crates/xtask",
|
||||||
"crates/build-info",
|
"crates/build-info",
|
||||||
|
"crates/openapi-generator",
|
||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
|
12
crates/openapi-generator/Cargo.toml
Normal file
12
crates/openapi-generator/Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[package]
|
||||||
|
name = "openapi-generator"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
meilisearch = { path = "../meilisearch" }
|
||||||
|
serde_json = "1.0"
|
||||||
|
clap = { version = "4.5.40", features = ["derive"] }
|
||||||
|
anyhow = "1.0.98"
|
||||||
|
utoipa = "5.4.0"
|
43
crates/openapi-generator/src/main.rs
Normal file
43
crates/openapi-generator/src/main.rs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use anyhow::Result;
|
||||||
|
use clap::Parser;
|
||||||
|
use meilisearch::routes::MeilisearchApi;
|
||||||
|
use utoipa::OpenApi;
|
||||||
|
|
||||||
|
#[derive(Parser)]
|
||||||
|
#[command(name = "openapi-generator")]
|
||||||
|
#[command(about = "Generate OpenAPI specification for Meilisearch")]
|
||||||
|
struct Cli {
|
||||||
|
/// Output file path (default: meilisearch.json)
|
||||||
|
#[arg(short, long, value_name = "FILE")]
|
||||||
|
output: Option<PathBuf>,
|
||||||
|
|
||||||
|
/// Pretty print the JSON output
|
||||||
|
#[arg(short, long)]
|
||||||
|
pretty: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
let cli = Cli::parse();
|
||||||
|
|
||||||
|
// Generate the OpenAPI specification
|
||||||
|
let openapi = MeilisearchApi::openapi();
|
||||||
|
|
||||||
|
// Determine output path
|
||||||
|
let output_path = cli.output.unwrap_or_else(|| PathBuf::from("meilisearch.json"));
|
||||||
|
|
||||||
|
// Serialize to JSON
|
||||||
|
let json = if cli.pretty {
|
||||||
|
serde_json::to_string_pretty(&openapi)?
|
||||||
|
} else {
|
||||||
|
serde_json::to_string(&openapi)?
|
||||||
|
};
|
||||||
|
|
||||||
|
// Write to file
|
||||||
|
std::fs::write(&output_path, json)?;
|
||||||
|
|
||||||
|
println!("OpenAPI specification written to: {}", output_path.display());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
Reference in New Issue
Block a user