diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml new file mode 100644 index 00000000..be60c34a --- /dev/null +++ b/.github/workflows/build_and_test.yml @@ -0,0 +1,94 @@ +name: Build & Test + +on: [push] + +env: + SMTP_HOST: localhost + SMTP_PORT: 1025 + MEMCACHED_HOST: localhost + REDIS_HOST: localhost + +jobs: + comply: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: ConorMacBride/install-package@v1 + with: + apt: libmemcached-dev + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + architecture: "x64" + - name: Setup PDM + uses: pdm-project/setup-pdm@v4 + - name: Install dependencies + run: pdm install + - name: Make Comply + run: make comply + + test: + needs: comply + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: ConorMacBride/install-package@v1 + with: + apt: libmemcached-dev + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + architecture: "x64" + - uses: hoverkraft-tech/compose-action@v2.0.1 + with: + compose-file: "./docker/compose-services-only.yml" + - name: Setup PDM + uses: pdm-project/setup-pdm@v4 + - name: Install dependencies + run: pdm install + - name: Make Test + run: make test + + test-all: + needs: test + runs-on: ${{ matrix.os }} + strategy: + matrix: + # FIXME ? + # os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest] + python-version: ["3.8", "3.9", "3.11", "3.12", "3.13", "pypy3.10"] + + steps: + - uses: actions/checkout@v4 + - uses: ConorMacBride/install-package@v1 + with: + apt: libmemcached-dev + - uses: hoverkraft-tech/compose-action@v2.0.1 + with: + compose-file: "./docker/compose-services-only.yml" + - name: Setup PDM + uses: pdm-project/setup-pdm@v4 + - name: Install dependencies + run: pdm install + - name: Make Test + run: make test + + cli-smoke-test: + needs: test-all + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: hoverkraft-tech/compose-action@v2.0.1 + with: + compose-file: "./docker-compose.yml" + - name: CLI Smoke Tests + run: ./scripts/cli-smoke-test.sh + - if: always() + name: Review Output + run: cat ./tmp/cli-smoke-test.out diff --git a/docker/compose-services-only.yml b/docker/compose-services-only.yml new file mode 100644 index 00000000..f9b456c8 --- /dev/null +++ b/docker/compose-services-only.yml @@ -0,0 +1,33 @@ +volumes: + mailpit-data: + +services: + redis: + image: redis:latest + hostname: redis + ports: + - 6379:6379 + + memcached: + image: memcached:latest + hostname: memcached + ports: + - 11211:11211 + + mailpit: + image: axllent/mailpit + hostname: mailpit + restart: always + volumes: + - mailpit-data:/data + - ../docker/mailpit:/certificates + ports: + - 8025:8025 + - 1025:1025 + environment: + MP_MAX_MESSAGES: 5000 + MP_DATA_FILE: /data/mailpit.db + MP_SMTP_AUTH_ACCEPT_ANY: 1 + MP_SMTP_AUTH_ALLOW_INSECURE: 1 + MP_SMTP_TLS_CERT: /certificates/dev-cert.pem + MP_SMTP_TLS_KEY: /certificates/dev-key.pem diff --git a/scripts/cli-smoke-test.sh b/scripts/cli-smoke-test.sh index 89e2c480..82c42af6 100755 --- a/scripts/cli-smoke-test.sh +++ b/scripts/cli-smoke-test.sh @@ -19,15 +19,15 @@ function smoke-test { python:$pyver \ /bin/bash - docker exec -it cement-cli-smoke-test /bin/bash -c "cd /src ; pip install `ls dist/cement-*.tar.gz`[cli]" - tmp=$(docker exec cement-cli-smoke-test /bin/bash -c "mktemp -d") + docker exec cement-cli-smoke-test /bin/bash -c "cd /src ; pip install `ls dist/cement-*.tar.gz`[cli]" + tmp=$(docker exec -t cement-cli-smoke-test /bin/bash -c "mktemp -d") + - ### verify help output res=$(docker exec cement-cli-smoke-test /bin/bash -c "cement --version") - echo "$res" | grep "Cement Framework $CEMENT_VERSION.\d" - echo "$res" | grep "Python $pyver.\d" + echo "$res" | grep "Cement Framework $CEMENT_VERSION.[0-9]" + echo "$res" | grep "Python $pyver.[0-9]" echo "$res" | grep "Platform Linux.*" res=$(docker exec cement-cli-smoke-test /bin/bash -c "cement --help") echo "$res" | grep "Cement Framework Developer Tools" @@ -45,37 +45,37 @@ function smoke-test { echo "$res" | grep "destination directory path" echo "$res" | grep -- "-D, --defaults" - + ### generate a project docker exec cement-cli-smoke-test /bin/bash -c "cement generate project -D $tmp/myapp" docker exec cement-cli-smoke-test /bin/bash -c "cd $tmp/myapp ; pip install -r requirements.txt" docker exec cement-cli-smoke-test /bin/bash -c "cd $tmp/myapp ; pip install setuptools" docker exec cement-cli-smoke-test /bin/bash -c "cd $tmp/myapp ; python setup.py install" - res=$(docker exec cement-cli-smoke-test /bin/bash -c "myapp --version") - echo "$res" | grep "Cement Framework $CEMENT_VERSION\.\d" - echo "$res" | grep "Python $pyver.\d" + res=$(docker exec -t cement-cli-smoke-test /bin/bash -c "myapp --version") + echo "$res" | grep "Cement Framework $CEMENT_VERSION\.[0-9]" + echo "$res" | grep "Python $pyver.[0-9]" echo "$res" | grep "Platform Linux.*" - + ### generate a script docker exec cement-cli-smoke-test /bin/bash -c "cement generate script -D $tmp/myscript" - res=$(docker exec cement-cli-smoke-test /bin/bash -c "python $tmp/myscript/myscript.py --version") + res=$(docker exec -t cement-cli-smoke-test /bin/bash -c "python $tmp/myscript/myscript.py --version") echo "$res" | grep "myscript v0.0.1" - + ### generate an extension docker exec cement-cli-smoke-test /bin/bash -c "cement generate extension -D $tmp/myapp/myapp/ext" - res=$(docker exec cement-cli-smoke-test /bin/bash -c "cat $tmp/myapp/myapp/ext/ext_myextension.py") + res=$(docker exec -t cement-cli-smoke-test /bin/bash -c "cat $tmp/myapp/myapp/ext/ext_myextension.py") echo "$res" | grep "myextension_pre_run_hook" ### generate a plugin docker exec cement-cli-smoke-test /bin/bash -c "cement generate plugin -D $tmp/myapp/myapp/plugins" - res=$(docker exec cement-cli-smoke-test /bin/bash -c "cat $tmp/myapp/myapp/plugins/myplugin/controllers/myplugin.py") + res=$(docker exec -t cement-cli-smoke-test /bin/bash -c "cat $tmp/myapp/myapp/plugins/myplugin/controllers/myplugin.py") echo "$res" | grep "class MyPlugin(Controller)" ### finish @@ -93,4 +93,4 @@ for pyver in $PYTHON_VERSIONS; do echo -n "python $pyver . . . " smoke-test $pyver 2>> tmp/cli-smoke-test.out 1>> tmp/cli-smoke-test.out echo "ok" -done \ No newline at end of file +done diff --git a/tmp/.gitkeep b/tmp/.gitkeep new file mode 100644 index 00000000..e69de29b