Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#13] reuse open-api-workflows workflows #447

Merged
merged 13 commits into from
Oct 17, 2024
138 changes: 36 additions & 102 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,26 +29,12 @@ jobs:

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- name: Set up backend environment
uses: maykinmedia/[email protected]
with:
apt-packages: 'libgdal-dev gdal-bin'
python-version: '3.11'
- uses: actions/setup-node@v4
with:
node-version: '18'

- name: Install system packages
run: |
sudo apt-get update \
&& sudo apt-get install -y --no-install-recommends \
libgdal-dev \
gdal-bin

- name: Install dependencies
run: pip install -r requirements/ci.txt codecov
- name: Build frontend
run: |
npm ci
npm run build
setup-node: true

- name: Run tests
run: |
Expand All @@ -61,27 +47,21 @@ jobs:
DB_PASSWORD: ''

- name: Publish coverage report
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v4

docs:
runs-on: ubuntu-latest
name: Documentation build

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- name: Set up backend environment
uses: maykinmedia/[email protected]
with:
apt-packages: 'libgdal-dev gdal-bin'
python-version: '3.11'
cache: 'pip'
cache-dependency-path: 'requirements/*.txt'
- name: Install system packages
run: |
sudo apt-get update \
&& sudo apt-get install -y --no-install-recommends \
libgdal-dev \
gdal-bin
- name: Install dependencies
run: pip install -r requirements/ci.txt pytest
setup-node: false

- name: Generate environment variable documentation using OAf and check if it was updated
run: |
bin/generate_envvar_docs.sh
Expand All @@ -94,81 +74,35 @@ jobs:
env:
DJANGO_SETTINGS_MODULE: objects.conf.ci

docker:
needs: tests

name: Build (and push) Docker image
store-reusable-workflow-vars:
name: create values which can be passed through a reusable workflow
runs-on: ubuntu-latest
outputs:
image-name: ${{ steps.image-name.outputs.image-name }}

steps:
- uses: actions/checkout@v4

- name: Set tag
id: vars
run: |
# Strip git ref prefix from version
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')

# Strip "v" prefix from tag name (if present at all)
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')

# Use Docker `latest` tag convention
[ "$VERSION" == "master" ] && VERSION=latest

echo ::set-output name=tag::${VERSION}

- name: Build the Docker image
env:
RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
run: docker build . --tag $IMAGE_NAME:$RELEASE_VERSION

- run: docker image save -o image.tar $IMAGE_NAME:${{ steps.vars.outputs.tag }}

- name: Store image artifact
uses: actions/upload-artifact@v3
with:
name: docker-image
path: image.tar
retention-days: 1
- run: echo "image-name=$IMAGE_NAME" >> $GITHUB_OUTPUT
name: 'Store the docker image name'
id: image-name

publish:
open-api-ci:
uses: maykinmedia/open-api-workflows/.github/workflows/ci.yml@v1
needs:
- store-reusable-workflow-vars
with:
main-branch: 'master'
python-version: '3.11'
docker-image-name: ${{ needs.store-reusable-workflow-vars.outputs.image-name }}

open-api-publish:
uses: maykinmedia/open-api-workflows/.github/workflows/publish.yml@v1
needs:
- store-reusable-workflow-vars
- open-api-ci
- tests
- docker

name: Push Docker image
runs-on: ubuntu-latest
if: github.event_name == 'push' # exclude PRs

steps:
- uses: actions/checkout@v4
- name: Download built image
uses: actions/download-artifact@v3
with:
name: docker-image

- name: Determine tag
id: vars
run: |
# Strip git ref prefix from version
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')

# Strip "v" prefix from tag name (if present at all)
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')

# Use Docker `latest` tag convention
[ "$VERSION" == "master" ] && VERSION=latest

echo ::set-output name=tag::${VERSION}

- name: Load image
run: |
docker image load -i image.tar

- name: Log into registry
run: echo "${{ secrets.DOCKER_TOKEN }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin

- name: Push the Docker image
env:
RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
run: docker push $IMAGE_NAME:$RELEASE_VERSION
with:
docker-image-name: ${{ needs.store-reusable-workflow-vars.outputs.image-name }}
repository-owner: 'maykinmedia'
secrets:
docker-username: ${{ secrets.DOCKER_USERNAME }}
docker-token: ${{ secrets.DOCKER_TOKEN }}
91 changes: 21 additions & 70 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
@@ -1,74 +1,25 @@
name: code-quality

on: [push]
on:
push:
branches:
- master
paths:
- '**.py'
- '**.yml'
pull_request:
paths:
- '**.py'
- '**.yml'
workflow_dispatch:

jobs:
isort:
name: Check import sorting
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: isort/isort-action@v1
with:
requirementsFiles: requirements/dev.txt
sortPaths: "src docs"
configuration: '--check-only --diff'

black:
name: Check code formatting with black
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements/dev.txt
- name: Run black
run: |
black --check src docs

oas-up-to-date:
name: Check for unexpected OAS changes
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: actions/setup-node@v4
with:
node-version: '18'

- name: Install system packages
run: |
sudo apt-get update \
&& sudo apt-get install -y --no-install-recommends \
libgdal-dev \
gdal-bin

- name: Install dependencies
run: pip install -r requirements/ci.txt

- name: Generate OAS files
run: ./bin/generate_schema.sh openapi.yaml
env:
DJANGO_SETTINGS_MODULE: objects.conf.ci

- name: Check for OAS changes
run: |
diff openapi.yaml src/objects/api/v2/openapi.yaml
- name: Write failure markdown
if: ${{ failure() }}
run: |
echo 'Run the following command locally and commit the changes' >> $GITHUB_STEP_SUMMARY
echo '' >> $GITHUB_STEP_SUMMARY
echo '```bash' >> $GITHUB_STEP_SUMMARY
echo './bin/generate_schema.sh' >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
open-api-workflow-code-quality:
uses: maykinmedia/open-api-workflows/.github/workflows/code-quality.yml@v1
with:
apt-packages: 'libgdal-dev gdal-bin'
python-version: '3.11'
node-version: '18'
postgres-image: 'postgis/postgis:12-2.5'

django-settings-module: 'objects.conf.ci'
51 changes: 2 additions & 49 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,52 +21,5 @@ on:
- cron: '36 0 * * 0'

jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write

strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

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

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.

# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality


# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2

# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
open-api-workflow-code-analysis:
uses: maykinmedia/open-api-workflows/.github/workflows/code-analysis.yml@v1
25 changes: 9 additions & 16 deletions .github/workflows/generate-postman-collection.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,12 @@ on:
workflow_dispatch:

jobs:
run:
runs-on: ubuntu-latest
name: Generate Postman collection

steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install dependencies
run: npm install -g openapi-to-postmanv2
- name: Create tests folder
run: mkdir -p ./tests/postman
- name: Generate Postman collection
run: openapi2postmanv2 -s ./src/objects/api/v2/openapi.yaml -o ./tests/postman/collection.json --pretty
open-api-workflow-generate-postman-collection:
uses: maykinmedia/open-api-workflows/.github/workflows/generate-postman-collection.yml@v1
strategy:
matrix:
version:
- v2
with:
node-version: '18'
schema-path: 'src/objects/api/${{ matrix.version }}/openapi.yaml'
38 changes: 9 additions & 29 deletions .github/workflows/generate-sdks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,12 @@ on:
workflow_dispatch:

jobs:
run:
runs-on: ubuntu-latest
name: Generate SDKs

steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install dependencies
run: npm install -g @openapitools/openapi-generator-cli
- name: Determing oas path
id: vars
run: echo ::set-output name=oas::./src/objects/api/v2/openapi.yaml
- name: Validate schema
run: openapi-generator-cli validate -i ${{ steps.vars.outputs.oas }}
- name: Generate Java client
run: openapi-generator-cli generate -i ${{ steps.vars.outputs.oas }} --global-property=modelTests=false,apiTests=false,modelDocs=false,apiDocs=false \
-o ./sdks/java -g java --additional-properties=dateLibrary=java8,java8=true,optionalProjectFile=false,optionalAssemblyInfo=false
# - name: Generate .NET Core client
# run: openapi-generator-cli generate -i ${{ steps.vars.outputs.oas }} --global-property=modelTests=false,apiTests=false,modelDocs=false,apiDocs=false \
# -o ./sdks/netcore -g csharp-netcore --additional-properties=optionalProjectFile=false,optionalAssemblyInfo=false
# - name: Generate .NET Full Framework client
# run: openapi-generator-cli generate -i ${{ steps.vars.outputs.oas }} --global-property=modelTests=false,apiTests=false,modelDocs=false,apiDocs=false \
# -o ./sdks/net -g csharp --additional-properties=optionalProjectFile=false,optionalAssemblyInfo=false
- name: Generate Python client
run: openapi-generator-cli generate -i ${{ steps.vars.outputs.oas }} --global-property=modelTests=false,apiTests=false,modelDocs=false,apiDocs=false \
-o ./sdks/python -g python --additional-properties=optionalProjectFile=false,optionalAssemblyInfo=false+
open-api-workflow-generate-sdks:
uses: maykinmedia/open-api-workflows/.github/workflows/generate-sdks.yml@v1
strategy:
matrix:
version:
- v2
with:
node-version: '18'
schema-path: 'src/objects/api/${{ matrix.version }}/openapi.yaml'
Loading
Loading