diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..c251f5f66 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,9 @@ +===REMOVE=== + +Important! Please follow the new guidelines for naming Pull Requests: https://docs.dasch.swiss/developers/dsp/contribution/#pull-request-guidelines + +> **Note:** If a pull request consists consists of *only one* commit when squash-merging it to main, the commit message will *not* be correct. In this case you have to manually ensure that the commit message is identical to the PR title, not the commit that the PR consists of. + +===REMOVE=== + +resolves DSP- \ No newline at end of file diff --git a/.github/workflows/ckeck-pr-title.yml b/.github/workflows/ckeck-pr-title.yml new file mode 100644 index 000000000..9a693b0ed --- /dev/null +++ b/.github/workflows/ckeck-pr-title.yml @@ -0,0 +1,20 @@ +name: PR-Title + +on: + pull_request: + types: [opened, edited, synchronize, reopened] + +jobs: + test: + name: Check PR Title + runs-on: ubuntu-latest + steps: + # check PR title + - uses: deepakputhraya/action-pr-title@master + with: + regex: '([a-z])+(\(([a-z\-_])+\))?!?: ([a-zA-Z ])+ \([A-Z]+-\d+\)' # Regex the title should match. + allowed_prefixes: 'fix,refactor,feat,docs,chore,style,test' # title should start with the given prefix + disallowed_prefixes: 'feature,hotfix,doc' # title should not start with the given prefix + prefix_case_sensitive: true # title prefix are case insensitive + min_length: 7 # Min length of the title + max_length: 60 # Max length of the title diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 000000000..1e13aa435 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,34 @@ +name: Release-Please + +# triggered when tests complete on main branch +on: + workflow_run: + workflows: + - "Test" + branches: + - main + types: + - completed + +jobs: + refused: + # Refuse if tests failed + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'failure'}} + steps: + - id: refused_step + run: exit 1 + + release-please: + # Automate releases with Conventional Commit Messages as Pull Requests are merged into "main" branch + name: Prepare next release + runs-on: ubuntu-latest + # release only if tests pass + if: ${{ github.event.workflow_run.conclusion == 'success'}} + steps: + - uses: GoogleCloudPlatform/release-please-action@v2 + with: + token: ${{ secrets.GH_TOKEN }} + release-type: python + package-name: dsp-tools + changelog-types: '[{"type": "feat", "section": "Enhancements", "hidden": false }, {"type": "fix", "section": "Bug Fixes", "hidden": false }, {"type": "chore", "section": "Maintenance", "hidden": false }, {"type": "refactor", "section": "Maintenance", "hidden": false }, {"type": "docs", "section": "Documentation", "hidden": false }]' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..46bc4daf0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,68 @@ +name: Release + +on: + release: + types: [released] + +# set environment variables +env: + TOKEN: ${{ secrets.GH_TOKEN }} + TWINE_USERNAME: ${{ secrets.PYPI_USER }} + TWINE_PASSWORD: ${{ secrets.PYPI_PW }} + +jobs: + # release to PyPI + release-pypi: + name: Release to PyPI + runs-on: ubuntu-latest + steps: + # check out repo + - uses: actions/checkout@v2 + with: + fetch-depth: 1 + # install python + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.9' + # install pythonn dependencies + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + # release new version to PyPI + - run: | + make upgrade-dist-tools + make dist + make upload + + release-docs: + name: Release Docs + runs-on: ubuntu-latest + steps: + # check out repo + - uses: actions/checkout@v2 + with: + fetch-depth: 1 + # install python + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.9' + # install pythonn dependencies + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + # release latest docs + - run: make publish-docs + + notification: + name: Google chat notification about release and published version + needs: [release-pypi, release-docs] + runs-on: ubuntu-latest + steps: + - name: Send notification to google chat room "DSP releases" + uses: lakto/google-chat-action@main + with: + url: ${{ secrets.GOOGLE_CHAT_DSP_RELEASES_WEBHOOK_URL }} diff --git a/.github/workflows/main.yml b/.github/workflows/test.yml similarity index 63% rename from .github/workflows/main.yml rename to .github/workflows/test.yml index 213ec1ea4..1e99c5686 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/test.yml @@ -1,20 +1,22 @@ -name: CI +name: Test -on: [push] - -env: - KNORA_GDB_LICENSE: ${{ github.workspace }}/ci/graphdb/UNIBAS_DEV_GRAPHDB_SE_latest-31-12-2020_1cores.license +on: + push: + pull_request: + types: [opened] jobs: test-integration: name: Integration Tests - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: + # run tests - name: Checkout source - uses: actions/checkout@v1 + uses: actions/checkout@v2 with: fetch-depth: 1 - - uses: joschi/setup-jdk@v2 + - name: Set up JDK + uses: joschi/setup-jdk@v2 with: java-version: '11' # The OpenJDK version to make available on the path architecture: 'x64' # defaults to 'x64' @@ -30,8 +32,10 @@ jobs: uses: actions/setup-python@v2 with: python-version: 3.9 - - name: Install python package dependencies - run: sudo apt-get install libxml2-dev libxslt-dev python3-dev libgstreamer1.0-0 gstreamer1.0-plugins-base freeglut3-dev libjpeg-dev libpng-dev libtiff-dev libsdl-dev libnotify-dev libsm-dev + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt - name: run test-integration run: | make upgrade-dist-tools diff --git a/README.md b/README.md index 52b9a2626..f842f2342 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,18 @@ $ make install $ make test ``` -## Publishing to PyPi +## Publishing + +Publishing is automated with github actions and should _not_ be done manually. + +Ensure to have only one Pull Request per feature, and follow the [conventions for commit messages and PR title](https://docs.dasch.swiss/developers/dsp/contribution/#pull-request-guidelines). + +If this is done correctly, when merging a PR into `main`, the `release-please` action will create or update a release-PR. +This PR will follow semantic versioning and update the change log. +Once all desired features are merged, the release can be executed by merging the release-PR into `main`. +This will trigger actions that create a release on Github, on PyPI and the docs. + +### Publishing to PyPi Generate distribution package. Make sure you have the latest versions of `setuptools` and `wheel` installed. Remove the `dist`and `buil`-directories: `rm -rf bild dist` diff --git a/docs/index.md b/docs/index.md index 059de7ecc..33c9fe3a1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -154,6 +154,18 @@ make test ## Publishing +Publishing is automated with github actions and should _not_ be done manually. + +Ensure to have only one Pull Request per feature, and follow the [conventions for commit messages and PR title](https://docs.dasch.swiss/developers/dsp/contribution/#pull-request-guidelines). + +If this is done correctly, when merging a PR into `main`, the `release-please` action will create or update a release-PR. +This PR will follow semantic versioning and update the change log. +Once all desired features are merged, the release can be executed by merging the release-PR into `main`. +This will trigger actions that create a release on Github, on PyPI and the docs. + + +### Publishing Manually + Generate distribution package. Make sure you have the latest versions of `setuptools` and `wheel` installed: ```bash diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..b88034e41 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[metadata] +description-file = README.md