Skip to content

Commit

Permalink
Merge pull request #552 from EOxServer/project-fixes
Browse files Browse the repository at this point in the history
Project fixes
  • Loading branch information
jankovicgd committed Jan 24, 2023
2 parents 98c98c2 + da75c20 commit 022917f
Show file tree
Hide file tree
Showing 64 changed files with 550 additions and 2,098 deletions.
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ autotest
build
dist
documentation
schemas
schemas
debian/
225 changes: 151 additions & 74 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,60 +1,77 @@
name: CI
on: push
run-name: CI pipeline triggered by @${{ github.actor }}
on:
push:
paths:
- '.github/workflows/**'
- 'setup.py'
- 'setup.cfg'
- 'MANIFEST.in'
- 'pyproject.toml'
- 'eoxserver/**'
jobs:
run:
build-docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build the eoxserver docker image
run: |
docker build -t eoxserver .
docker save eoxserver | gzip > eoxserver.tar.gz
- uses: actions/upload-artifact@v3
with:
name: eoxserver
path: eoxserver.tar.gz
retention-days: 2
- name: Slack Notify
uses: 8398a7/action-slack@v3.8.0
with:
status: ${{ needs.run.result }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()

test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# TODO: deactivated as django 1.11 does not seem to work with the GEOS version supplied by Ubuntu 20.04
# - os: ubuntu
# python: py3
# db: postgis
# django: "1.11.26"
# python_bin: python3
# pip_bin: pip3
- os: ubuntu
python: py3
db: postgis
django: "3.2.12"
- db: postgis
python_bin: python3
pip_bin: pip3
- os: ubuntu
python: py3
db: spatialite
django: "3.2.12"
- db: spatialite
python_bin: python3
pip_bin: pip3
latest: true
needs: build-docker
steps:
- uses: actions/checkout@v2
- name: Build the eoxserver docker image
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3.0.1
with:
name: eoxserver
- name: Import docker image
run: |
docker build -t eoxserver --build-arg DJANGO=${{ matrix.django }} -f docker/${{ matrix.os }}/${{ matrix.python }}/Dockerfile .
docker load --input eoxserver.tar.gz
- name: Run the tests
env:
COMPOSE_INTERACTIVE_NO_CLI: 1
run: |
cd autotest
echo "DB=${{ matrix.db }}" >> eoxserver.env
echo "DB=${{ matrix.db }}" >> sample.env
docker-compose config
docker-compose up -d
docker-compose ps
docker exec -i autotest_autotest_1 ${{ matrix.pip_bin }} install scipy
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} -m eoxserver.services.ows.wps.test_data_types
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} -m eoxserver.services.ows.wps.test_allowed_values
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=../eoxserver/ eoxserver.core -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=../eoxserver/ eoxserver.backends -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=../eoxserver/ eoxserver.services -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=../eoxserver/ eoxserver.resources.coverages -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wcs20 -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wcs11 -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wcs10 -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wms -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wps -v2
docker exec -i autotest_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag opensearch -v2
cd ..
docker exec -i eoxserver_autotest_1 pip3 install scipy
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} -m eoxserver.services.ows.wps.test_data_types
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} -m eoxserver.services.ows.wps.test_allowed_values
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=./eoxserver/ eoxserver.core -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=./eoxserver/ eoxserver.backends -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=./eoxserver/ eoxserver.services -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test --pythonpath=./eoxserver/ eoxserver.resources.coverages -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wcs20 -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wcs11 -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wcs10 -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wms -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag wps -v2
docker exec -i eoxserver_autotest_1 ${{ matrix.python_bin }} manage.py test autotest_services --tag opensearch -v2
- name: Upload logs and outputs of failed tests
uses: 'actions/upload-artifact@v2'
with:
Expand All @@ -64,64 +81,112 @@ jobs:
autotest/autotest/responses/*
retention-days: 5
if: failure()
- name: Slack Notify
uses: 8398a7/action-slack@v3.8.0
with:
status: ${{ needs.run.result }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()

# get branch/tag name for later stages
publish-docker:
runs-on: ubuntu-latest
needs: test
if: contains(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3.0.1
with:
name: eoxserver
- name: Branch name
id: branch_name
run: |
echo ::set-output name=SOURCE_BRANCH:: $([[ $GITHUB_REF == refs/heads/* ]] && echo ${GITHUB_REF#refs/heads/} || echo "")
echo ::set-output name=SOURCE_TAG::$([[ $GITHUB_REF == refs/tags/* ]] && echo ${GITHUB_REF#refs/tags/} || echo "")
# docker image tagging/publishing
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
if: success()

# conditionally tag docker images and push them to dockerhub
- name: Tag docker latest master image
- name: Import docker image
run: |
docker tag eoxserver eoxa/eoxserver:master
if: success() && steps.branch_name.outputs.SOURCE_BRANCH == 'master' && matrix.latest
docker load --input eoxserver.tar.gz
- name: Tag docker latest image
run: |
docker tag eoxserver eoxa/eoxserver:latest
if: success() && matrix.latest
- name: Tag docker latest release image
if: github.ref == 'refs/heads/master'
- name: Tag docker release image
run: |
docker tag eoxserver eoxa/eoxserver:${{ steps.branch_name.outputs.SOURCE_TAG }}
if: success() && steps.branch_name.outputs.SOURCE_TAG && matrix.latest
- name: Tag docker release image with OS and Python/Django versions
run: |
docker tag eoxserver eoxa/eoxserver:${{ steps.branch_name.outputs.SOURCE_TAG }}-${{ matrix.os }}-${{ matrix.python }}-django${{ matrix.django }}
if: success() && startsWith(steps.branch_name.outputs.SOURCE_TAG, 'release-')
if: steps.branch_name.outputs.SOURCE_TAG
- name: Push docker images
run: |
# TODO: --all-tags does not seem to work with the version on github-actions
# docker push --all-tags eoxa/eoxserver
for tag in $(docker image ls --format "{{.Tag}}" eoxa/eoxserver) ; do docker push "eoxa/eoxserver:$tag" ; done
if: success()
- name: Slack Notify
uses: 8398a7/action-slack@v3.8.0
with:
status: ${{ needs.run.result }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()

# build a Python package and publish it on pypi
publish-pypi:
runs-on: ubuntu-latest
needs: test
if: contains(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v3
- name: Branch name
id: branch_name
run: |
echo ::set-output name=SOURCE_TAG::$([[ $GITHUB_REF == refs/tags/* ]] && echo ${GITHUB_REF#refs/tags/} || echo "")
- name: Build Python package
id: build_python_release
run: |
python -m pip install --upgrade pip
pip install setuptools wheel
python setup.py sdist bdist_wheel
echo ::set-output name=WHEEL_FILE::$(ls dist/*.whl)
echo ::set-output name=SRC_DIST_FILE::$(ls dist/*.tar.gz)
- uses: actions/upload-artifact@v3
with:
name: eoxserver-dist
path: ./dist/
retention-days: 2
- name: Push package to pypi
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
if: success() && matrix.latest && startsWith(steps.branch_name.outputs.SOURCE_TAG, 'release-')

# draft a github release and add files
- name: Create Release
if: success()
- name: Slack Notify
uses: 8398a7/action-slack@v3.8.0
with:
status: ${{ needs.run.result }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()

publish-github:
runs-on: ubuntu-latest
needs: publish-pypi
if: contains(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3.0.1
with:
name: eoxserver-dist
- name: Branch name
id: branch_name
run: |
echo ::set-output name=SOURCE_TAG::$([[ $GITHUB_REF == refs/tags/* ]] && echo ${GITHUB_REF#refs/tags/} || echo "")
echo ::set-output name=WHEEL_FILE::$(ls dist/*.whl)
echo ::set-output name=SRC_DIST_FILE::$(ls dist/*.tar.gz)
- name: Draft Release
id: create_release
uses: actions/create-release@v1
env:
Expand All @@ -130,38 +195,50 @@ jobs:
tag_name: ${{ github.ref }}
release_name: ${{ steps.branch_name.outputs.SOURCE_TAG }}
draft: true
if: success() && matrix.latest && startsWith(steps.branch_name.outputs.SOURCE_TAG, 'release-')
- name: Upload Release Asset Wheel
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.build_python_release.outputs.WHEEL_FILE }}
asset_name: ${{ steps.build_python_release.outputs.WHEEL_FILE }}
asset_path: ${{ steps.branch_name.outputs.WHEEL_FILE }}
asset_name: ${{ steps.branch_name.outputs.WHEEL_FILE }}
asset_content_type: application/x-wheel+zip
if: success() && matrix.latest && startsWith(steps.branch_name.outputs.SOURCE_TAG, 'release-')
if: success()
- name: Upload Release Asset Source Dist
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path: ${{ steps.build_python_release.outputs.SRC_DIST_FILE }}
asset_name: ${{ steps.build_python_release.outputs.SRC_DIST_FILE }}
asset_path: ${{ steps.branch_name.outputs.SRC_DIST_FILE }}
asset_name: ${{ steps.branch_name.outputs.SRC_DIST_FILE }}
asset_content_type: application/tar+gzip
if: success() && matrix.latest && startsWith(steps.branch_name.outputs.SOURCE_TAG, 'release-')

note:
if: success()
- name: Slack Notify
uses: 8398a7/action-slack@v3.8.0
with:
status: ${{ needs.run.result }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: failure()

notify:
runs-on: ubuntu-20.04
needs: run
needs: [publish-github, publish-docker]
steps:
# send Slack notifications to the eox organization
- name: action-slack
- name: Slack Notify
uses: 8398a7/action-slack@v3.8.0
with:
status: ${{ needs.run.result }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
custom_payload: |
{
attachments: [{
text: `Publish tag finished`,
}]
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
if: always()
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@
.devcontainer/

instances/
.minio.sys/
30 changes: 8 additions & 22 deletions docker/ubuntu/py3/Dockerfile → Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
FROM ubuntu:22.04

ARG DJANGO=3.2.12
ARG TZ=UTC

ENV INSTANCE_NAME=instance
ENV TZ=UTC

# possible values are "postgis" and "spatialite"
ENV DB=spatialite
Expand All @@ -24,7 +22,9 @@ ENV INIT_SCRIPTS=''
ENV GUNICORN_CMD_ARGS "--config /opt/eoxserver/gunicorn.conf.py ${INSTANCE_NAME}.wsgi:application"

# install OS dependency packages
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir /opt/eoxserver/
WORKDIR /opt/eoxserver
COPY . .
RUN apt-get update \
&& apt-get install -y \
python3 \
Expand All @@ -38,26 +38,12 @@ RUN apt-get update \
python3-psycopg2 \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/partial/* /tmp/* /var/tmp/*

# install EOxServer
RUN mkdir /opt/eoxserver/

ADD eoxserver /opt/eoxserver/eoxserver
ADD tools /opt/eoxserver/tools
ADD setup.cfg setup.py MANIFEST.in README.rst requirements.txt /opt/eoxserver/
ADD docker/eoxserver-entrypoint.sh /opt/eoxserver/
ADD docker/gunicorn.conf.py /opt/eoxserver/

# install EOxServer and its dependencies
WORKDIR /opt/eoxserver

RUN pip3 install -r requirements.txt \
&& pip3 install "django==$DJANGO" \
&& pip3 install .
&& rm -rf /var/lib/apt/lists/partial/* /tmp/* /var/tmp/* \
&& pip3 install --no-cache-dir . \
&& chmod +x entrypoint.sh

EXPOSE 8000

ENTRYPOINT ["/opt/eoxserver/eoxserver-entrypoint.sh"]
ENTRYPOINT ["/opt/eoxserver/entrypoint.sh"]

CMD "gunicorn" $GUNICORN_CMD_ARGS

0 comments on commit 022917f

Please sign in to comment.