Skip to content

add devcontainer

add devcontainer #1791

Workflow file for this run

name: CI
on:
pull_request:
workflow_dispatch:
inputs:
PyDynaRunContainer:
description: 'Run container name'
required: false
default: ghcr.io/ansys/pydyna-run:latest
push:
tags:
- "*"
branches:
- main
env:
MAIN_PYTHON_VERSION: '3.10'
PACKAGE_NAME: 'ansys-dyna-core'
PACKAGE_NAMESPACE: 'ansys.dyna.core'
DOCUMENTATION_CNAME: "dyna.docs.pyansys.com"
PYDYNA_RUN_CONTAINER: ${{ github.event.inputs.PyDynaRunContainer || 'ghcr.io/ansys/pydyna-run:latest'}}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
code-style:
name: "Code style"
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/code-style@v8
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
codegen-testing:
name: Build and Testing for codegen
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
- name: Install library
run: pip install -e .[codegen]
- name: Generate codegen
run: |
python codegen/generate.py -c
python codegen/generate.py
- name: Run codegen testing
run: |
if git -C src/ansys/dyna/core/keywords/keyword_classes/auto diff --relative --exit-code; then
echo "CHANGES=false" >> "$GITHUB_ENV"
else
echo "CHANGES=true" >> "$GITHUB_ENV"
fi
- name: Exit on changes
if: ${{ env.CHANGES == 'true' }}
run: exit 1
doc-style:
name: "Documentation style"
runs-on: ubuntu-latest
steps:
- name: PyAnsys documentation style checks
uses: ansys/actions/doc-style@v8
with:
token: ${{ secrets.GITHUB_TOKEN }}
doc:
name: "Documentation build"
runs-on: ubuntu-latest
needs: [doc-style]
steps:
- name: "Checkout project"
uses: actions/checkout@v4
- name: "Set up Python ${{ env.MAIN_PYTHON_VERSION }}"
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
- name: "Install system dependencies"
run: |
sudo apt-get update
sudo apt-get install xvfb pandoc texlive-latex-extra latexmk
- name: "Install python dependencies"
run: |
python -m pip install .[doc]
# optional dependency for `run_dyna` to work with docker.
# TODO - consider adding to pyproject.toml under an option
python -m pip install docker
- name: "Login to GitHub container registry"
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Install and run DPF server"
run: |
docker pull ghcr.io/ansys/dpf-core:22.2dev
docker run -d --name dpfserver -p 50054:50052 ghcr.io/ansys/dpf-core:22.2dev && echo "DPF Server active on port 50054."
- name: LS-DYNA Keyword server activation
run: |
docker pull ghcr.io/ansys/ls-pre:latest
docker run -d --name kw_server -p 50051:50051 ghcr.io/ansys/ls-pre:latest && echo "Keyword server active on port 50051."
- name: Pull PyDyna-run image
run: |
docker pull ghcr.io/ansys/pydyna-run:latest
- name: "Build the html documentation"
env:
ANSYSLI_SERVERS: 2325@${{secrets.LICENSE_SERVER}}
ANSYSLMD_LICENSE_FILE: 1055@${{secrets.LICENSE_SERVER}}
LSTC_LICENSE: ansys
PYDYNA_RUN_CONTAINER: ${{ env.PYDYNA_RUN_CONTAINER }}
run: |
xvfb-run make -C doc html
- name: "Upload html documentation"
uses: actions/upload-artifact@v4
with:
name: documentation-html
path: doc/_build/html
retention-days: 7
- name: "Build the pdf documentation"
env:
ANSYSLI_SERVERS: 2325@${{secrets.LICENSE_SERVER}}
ANSYSLMD_LICENSE_FILE: 1055@${{secrets.LICENSE_SERVER}}
LSTC_LICENSE: ansys
PYDYNA_RUN_CONTAINER: ${{ env.PYDYNA_RUN_CONTAINER }}
PYDYNA_RUN_STREAM: "0"
run: |
xvfb-run make -C doc pdf
- name: "Upload pdf documentation"
uses: actions/upload-artifact@v4
with:
name: documentation-pdf
path: doc/_build/latex/*.pdf
retention-days: 7
- name: Extract the server logs
if: always()
run: |
docker logs kw_server > server_output.txt
- name: "Upload the server logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: server_output_docs.txt
path: server_output.txt
- name: DPF Logs (on screen)
if: always()
run: |
docker logs dpfserver
docker stop dpfserver
smoke-tests:
name: "Build wheelhouse for ${{ matrix.os }} and Python ${{ matrix.python-version }}"
runs-on: ${{ matrix.os }}
needs: [code-style]
strategy:
fail-fast: false
matrix:
os: [windows-latest, ubuntu-latest]
python-version: ['3.10', '3.11', '3.12']
steps:
- uses: ansys/actions/build-wheelhouse@v8
with:
library-name: ${{ env.PACKAGE_NAME }}
operating-system: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
tests:
name: "Testing"
runs-on: ubuntu-latest
needs: [smoke-tests]
steps:
- name: "Checkout repository"
uses: actions/checkout@v4
- name: "Set up Python"
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
- name: "Login to GitHub container registry"
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Pull and start LS-DYNA keyword server"
run: |
docker pull ghcr.io/ansys/ls-pre:latest
docker run -d --name kw_server -p 50051:50051 ghcr.io/ansys/ls-pre:latest && echo "Keyword server active on port 50051."
- name: "Install package dependencies"
run: |
pip install -e .[tests]
- name: "Run tests"
run: |
pytest
- name: "Extract the server logs"
if: always()
run: |
docker logs kw_server > server_output.txt
- name: "Upload the server logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: server_output_tests.txt
path: server_output.txt
- name: "Upload coverage results"
uses: actions/upload-artifact@v4
with:
name: coverage-html
path: .cov/html
retention-days: 7
run-testing:
name: Test the "run" subpackage
runs-on: ubuntu-latest
needs: [code-style]
steps:
- uses: actions/checkout@v4
- name: "Set up Python ${{ env.MAIN_PYTHON_VERSION }}"
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
cache: 'pip'
cache-dependency-path: 'pyproject.toml'
- name: "Install python dependencies"
run: |
python -m pip install docker # todo make this an option?
python -m pip install .[tests]
- name: Pull PyDyna-run image
run: |
docker pull ${{ env.PYDYNA_RUN_CONTAINER }}
- name: Unit testing
env:
PYDYNA_RUN_CONTAINER: ${{ env.PYDYNA_RUN_CONTAINER }}
ANSYSLI_SERVERS: 2325@${{secrets.LICENSE_SERVER}}
ANSYSLMD_LICENSE_FILE: 1055@${{secrets.LICENSE_SERVER}}
LSTC_LICENSE: ansys
run: |
pytest -m run
build-library:
name: "Build library"
needs: [doc, tests, run-testing]
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/build-library@v8
with:
library-name: ${{ env.PACKAGE_NAME }}
python-version: ${{ env.MAIN_PYTHON_VERSION }}
release:
name: Release project
if: github.event_name == 'push' && contains(github.ref, 'refs/tags')
needs: [build-library]
runs-on: ubuntu-latest
steps:
- name: "Release to the public PyPI repository"
uses: ansys/actions/release-pypi-public@v8
with:
library-name: ${{ env.PACKAGE_NAME }}
twine-username: "__token__"
twine-token: ${{ secrets.PYPI_TOKEN }}
- name: "Release to GitHub"
uses: ansys/actions/release-github@v8
with:
library-name: ${{ env.PACKAGE_NAME }}
doc-deploy-dev:
name: "Deploy development documentation"
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs: [build-library]
steps:
- uses: ansys/actions/doc-deploy-dev@v8
with:
cname: ${{ env.DOCUMENTATION_CNAME }}
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }}
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }}
doc-deploy-stable:
name: "Deploy stable documentation"
if: github.event_name == 'push' && contains(github.ref, 'refs/tags')
runs-on: ubuntu-latest
needs: [release]
steps:
- uses: ansys/actions/doc-deploy-stable@v8
with:
cname: ${{ env.DOCUMENTATION_CNAME }}
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }}
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }}