Skip to content

Commit

Permalink
Setup Github Actions
Browse files Browse the repository at this point in the history
- setup a docker image with redocly openapi cli installed
- setup our github actions entrypoint shell script
- setup the actions metadata file
  • Loading branch information
mhiew committed Mar 21, 2021
1 parent 7ea2b7f commit 86b38dc
Show file tree
Hide file tree
Showing 9 changed files with 319 additions and 1 deletion.
16 changes: 16 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: lint

on: [push, pull_request]

jobs:
lint:
runs-on: ubuntu-latest
name: redocly openapi lint
steps:
- name: checkout
uses: actions/checkout@v2

- name: lint
uses: ./ # run as private action
with:
args: 'test/petstore.yml'
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.swp
*.swo
14 changes: 14 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM node:alpine

LABEL "com.github.actions.name"="Redocly OpenAPI Lint Github Action"
LABEL "com.github.actions.description"="Github Action that runs Redocly OpenAPI Lint."
LABEL "com.github.actions.icon"="box"
LABEL "com.github.actions.color"="green"

RUN ["npm", "install", "-g", "@redocly/openapi-cli@latest"]

COPY LICENSE README.md /

COPY entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
32 changes: 31 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,31 @@
# redoc-lint-github-action
# redoc-lint-github-action

This action allows you to lint your OpenAPI file.

## Credits

This Github Action is a wrapper for [Redocly's Open API CLI](https://github.com/Redocly/openapi-cli)
[openapi-cli lint](https://redoc.ly/docs/cli/commands/#lint) command.

## Inputs
`args`

The entrypoint and other arguments to be provided to the openapi lint command.
This is relative to your github workspace.

## Example Usage
```yaml
jobs:
test_job:
runs-on: ubuntu-latest
name: Test
steps:
- name: Checkout
uses: actions/checkout@v2

# then use redoc-cli-github-action to generate your HTML bundle
- name: openapi-lint
uses: mhiew/redoc-lint-github-action@v1
with:
args: 'test/petstore.yml'
```
19 changes: 19 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: 'redoc-lint-github-action'

description: 'Runs the Redocly Open API CLI lint over your open api document'

branding:
icon: 'check'
color: 'purple'

inputs:
args:
description: 'entrypoint and arguments to be provided to openapi lint'
required: true
default: "--help"

runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.args }}
7 changes: 7 additions & 0 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/sh

cd /github/workspace

echo "redoc openapi cli version: $(openapi --version)"

openapi lint $1
37 changes: 37 additions & 0 deletions test/list_pets.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
summary: List all pets

operationId: listPets

tags:
- pets

parameters:
- name: limit
in: query
description: How many items to return at one time (max 100)
required: false
schema:
type: integer
format: int32

responses:
'200':
description: A paged array of pets

headers:
x-next:
description: A link to the next page of responses
schema:
type: string

content:
application/json:
schema:
$ref: "petstore.yml#/components/schemas/Pets"

default:
description: unexpected error
content:
application/json:
schema:
$ref: "petstore.yml#/components/schemas/Error"
111 changes: 111 additions & 0 deletions test/petstore-full.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
openapi: 3.0.0
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
servers:
- url: 'http://petstore.swagger.io/v1'
paths:
/pets:
get:
summary: List all pets
operationId: listPets
tags:
- pets
parameters:
- name: limit
in: query
description: How many items to return at one time (max 100)
required: false
schema:
type: integer
format: int32
responses:
'200':
description: A paged array of pets
headers:
x-next:
description: A link to the next page of responses
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Pets'
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
summary: Create a pet
operationId: createPets
tags:
- pets
responses:
'201':
description: Null response
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/pets/{petId}':
get:
summary: Info for a specific pet
operationId: showPetById
tags:
- pets
parameters:
- name: petId
in: path
required: true
description: The id of the pet to retrieve
schema:
type: string
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
default:
description: unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Pet:
type: object
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
type: string
Pets:
type: array
items:
$ref: '#/components/schemas/Pet'
Error:
type: object
required:
- code
- message
properties:
code:
type: integer
format: int32
message:
type: string
82 changes: 82 additions & 0 deletions test/petstore.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
servers:
- url: http://petstore.swagger.io/v1
paths:
/pets:
get:
$ref: 'list_pets.yml'
post:
summary: Create a pet
operationId: createPets
tags:
- pets
responses:
'201':
description: Null response
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
/pets/{petId}:
get:
summary: Info for a specific pet
operationId: showPetById
tags:
- pets
parameters:
- name: petId
in: path
required: true
description: The id of the pet to retrieve
schema:
type: string
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/Pet"
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
components:
schemas:
Pet:
type: object
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
type: string
Pets:
type: array
items:
$ref: "#/components/schemas/Pet"
Error:
type: object
required:
- code
- message
properties:
code:
type: integer
format: int32
message:
type: string

0 comments on commit 86b38dc

Please sign in to comment.