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

chore: update requirements to latest versions, update Docker, and include CI/CD publish #144

Merged
merged 3 commits into from
Jan 5, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[flake8]
# @see https://flake8.pycqa.org/en/latest/user/configuration.html?highlight=.flake8


# Extended output format.
format = pylint

# Show the source of errors.
show_source = True
statistics = True
count = True

max-complexity = 10
max-line-length = 88

# List ignore rules one per line.
ignore =
C901
E501
W503
# Ignore [F401, 403] unused imports - for now
F401
F403
# Ignore [E731] do not assign a lambda expression, use a def - for now
E731
# Ignore: [E721] do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()` - for now
E721
37 changes: 31 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,46 @@
name: Docker Compose Actions Workflow
on: push
on:
push:
workflow_call:

jobs:
test:
runs-on: ubuntu-latest
steps:
# need checkout before using compose-action
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Install requirements
run: pip install flake8 pycodestyle

- name: Check syntax
run: flake8 .

- name: Create folders
run: |
mkdir -p var/{log,screenshots,mail,sms,gcm,downloads,reports}
mkdir -p var/{log,screenshots,mail,sms,gcm,downloads}
mkdir -p reports
chmod -R a+rwX var
- uses: isbang/[email protected]
chmod -R a+rwX reports

- uses: isbang/[email protected]

- name: Test
run: |
docker-compose exec -T behaving behave --junit tests/features
docker compose exec -T behaving behave --junit tests/features

- name: Test Summary
uses: test-summary/action@v2
with:
paths: "reports/TESTS-*.xml"
if: always()

- name: Publish Test Report
uses: mikepenz/action-junit-report@v3
uses: mikepenz/action-junit-report@v5
if: always() # always run even if the previous step fails
with:
report_paths: "**/TESTS-*.xml"
136 changes: 136 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
---
name: Publish to pypi
on:
push:
#On versioned releases
tags:
- '*.*.*'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
force:
type: choice
description: Retry Publish Version
options:
- No
- Yes
environment:
description: 'Deployment environment'
required: true
default: 'pypi'
type: choice
options:
- pypi
- testpypi
dryRun:
description: 'Dry Run deployment (set to false to deploy)'
required: true
type: boolean
default: true



jobs:

validateVersion:
runs-on: ubuntu-latest
if: github.repository == 'ggozad/behaving'
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Validate tag version
if: ${{ startsWith(github.ref, 'refs/tags') }}
run: |
TAG_VALUE=${GITHUB_REF/refs\/tags\//}
PYTHON_VERSION=$(grep -E '\b^version\s?=\s?"[^"]+"' pyproject.toml | awk -F '"' '{print $2}')
echo "Tag version is [$TAG_VALUE], Python version is [$PYTHON_VERSION]"
if [ "$TAG_VALUE" != "$PYTHON_VERSION" ]; then
echo "Version mismatch; tag version is [$TAG_VALUE] but Python version is [$PYTHON_VERSION]" >> $GITHUB_STEP_SUMMARY
exit 1
fi

test:
needs: validateVersion
name: Test
uses: ./.github/workflows/ci.yml # Call the reusable workflow

publishSkipped:
if: github.repository != 'ggozad/behaving'
runs-on: ubuntu-latest
steps:
- run: |
echo "## Skipping PyPI publish on downstream repository" >> $GITHUB_STEP_SUMMARY

publish:
needs: test
permissions:
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
name: Publish Package
runs-on: ubuntu-latest
environment:
name: ${{ github.event.inputs.environment || 'pypi' }}
url: ${{ steps.version.outputs.url }}
concurrency:
group: ${{ github.event.inputs.environment }}-deployment
cancel-in-progress: false
env:
ENVIRONMENT: ${{ github.event.inputs.environment || 'pypi' }}
steps:
- name: Get Git Tag and set url from environment
id: version
run: |
#!/bin/bash

TAG_VALUE=${GITHUB_REF/refs\/tags\//}
echo "version=${TAG_VALUE}" >> $GITHUB_OUTPUT

# Extract the repository name (minus the owner/org)
reponame=$(basename $GITHUB_REPOSITORY)
echo "reponame=${reponame}" >> $GITHUB_OUTPUT

if [ "$env.ENVIRONMENT" == "testpypi" ]; then
url="https://test.pypi.org/project/$reponame/$TAG_VALUE/"
echo "environment=${env.ENVIRONMENT}" >> $GITHUB_OUTPUT
else
url="https://pypi.org/project/$reponame/$TAG_VALUE/"
echo "environment=pypi" >> $GITHUB_OUTPUT
fi

echo "url=${url}" >> $GITHUB_OUTPUT

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

- name: Build package ${{ steps.version.outputs.reponame }} @ ${{ steps.version.outputs.version }}
run: |
pip install build
pip install twine
python -m build
- name: Publish package distributions to PyPI
if: ${{ startsWith(github.ref, 'refs/tags') && steps.version.outputs.environment == 'pypi' && github.event.inputs.dryRun != 'true' }}
uses: pypa/gh-action-pypi-publish@release/v1
# with:
# skip-existing: true
# verbose: true
# print-hash: true
- name: Test Publish package distributions to PyPI
if: ${{ startsWith(github.ref, 'refs/tags') && steps.version.outputs.environment == 'testpypi' && github.event.inputs.dryRun == 'true' }}
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
# skip-existing: true
# verbose: true
# print-hash: true
- name: Summary output
if: ${{ startsWith(github.ref, 'refs/tags') && github.event.inputs.dryRun != 'true' }}
run:
echo "Published ${{ steps.version.outputs.repo_name }} @ ${{ steps.version.outputs.version }} to ${{ steps.version.outputs.url }}" >> $GITHUB_STEP_SUMMARY

- name: (TEST RUN) Test Publish package distributions to PyPI
if: ${{ github.event.inputs.dryRun == 'true' }}
run:
echo "Dry run deployment, did not publish" >> $GITHUB_STEP_SUMMARY
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ __pycache__/
/var/
/dist/
/venv/
/poetry.toml
/poetry.toml
/.idea
/reports
24 changes: 24 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,30 @@
Changelog
=========

3.2.0 - 2024-01-03
------------------


- Moved from patch-level locks to minimum version checks (ensuring compatibility until major changes break things)
[duttonw]

- Removed Splinters overrides of browsers
- light touch behaving, so it should work with newer versions of splinter
[duttonw]

- Added automatic PyPI version publishing via GitHub (once PyPI OIDC trust to repo is established)
[duttonw]

- Introduced flake8 for code linting
[duttonw]

- Updated GitHub Action `ci.yml` to use the latest versions
[duttonw]

- Added GitHub Action `publish.yml` to allow version push auto publish
[duttonw]


3.1.5 - 2023-04-03
------------------

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ Please refer to _behave_'s excellent
how to use it, how to write your custom steps and make it possible to
extend _behaving_.

### Contributing

See [CONTRIBUTING.rst](./src/behaving/CONTRIBUTING.rst)

## Hello world

Starting to use _behaving_ is pretty easy. Inside some python module,
Expand Down
3 changes: 1 addition & 2 deletions config/selenoid/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,4 @@ ARG DOWNLOAD_VOLUME
RUN apk add gettext

COPY browsers.json.template /etc/selenoid/browsers.json.template
RUN export CHROME_IMAGE=$([ "${BUILDPLATFORM}" = "linux/arm64" ] && echo "sskorol/selenoid_chromium_vnc:100.0" || echo "selenoid/chrome") && \
envsubst < /etc/selenoid/browsers.json.template > /etc/selenoid/browsers.json
RUN envsubst < /etc/selenoid/browsers.json.template > /etc/selenoid/browsers.json
4 changes: 2 additions & 2 deletions config/selenoid/browsers.json.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"default": "latest",
"versions": {
"latest": {
"image": "selenoid/firefox:110.0",
"image": "selenoid/firefox:125.0",
"port": "4444",
"path": "/wd/hub",
"tmpfs": { "/tmp": "size=512m" },
Expand All @@ -17,7 +17,7 @@
"default": "latest",
"versions": {
"latest": {
"image": "$CHROME_IMAGE",
"image": "selenoid/chrome:latest",
"port": "4444",
"tmpfs": { "/tmp": "size=512m" },
"volumes": [
Expand Down
11 changes: 7 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
version: "3"
networks:
behaving:
name: behaving

services:
web:
image: nginx
image: nginx:latest
container_name: web
networks:
- behaving
Expand All @@ -28,17 +27,21 @@ services:
user: behaving
container_name: behaving
stdin_open: true
tty: true
depends_on:
- selenoid
volumes:
- ./src:/app/src
- ./tests:/app/tests
- ./var:/app/var
- ./reports:/app/reports

#keep .config/selenoid/browers.json.template in sync
firefox:
image: selenoid/firefox:110.0
image: selenoid/firefox:latest
entrypoint: echo "Only here to make sure the image is available to selenoid"

#keep .config/selenoid/browers.json.template in sync
chrome:
image: selenoid/chrome:latest
entrypoint: echo "Only here to make sure the image is available to selenoid"
Expand Down Expand Up @@ -73,7 +76,7 @@ services:
- "4444:4444"

selenoid-ui:
image: "aerokube/selenoid-ui"
image: "aerokube/selenoid-ui:latest"
networks:
- behaving
ports:
Expand Down
4 changes: 2 additions & 2 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:3.9-slim-bullseye
FROM python:3.10-slim-bullseye

ENV DEBIAN_FRONTEND=noninteractive
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8
Expand All @@ -8,7 +8,7 @@ ENV PYTHONDONTWRITEBYTECODE 1
# Do not ever buffer console output
ENV PYTHONUNBUFFERED 1

RUN pip install --upgrade pip poetry pip install supervisor
RUN pip install --upgrade pip && pip install --upgrade poetry && pip install --upgrade supervisor

COPY poetry.lock pyproject.toml README.md config/supervisord.conf .gherkin-lintrc /app/
COPY src /app/src/
Expand Down
2 changes: 1 addition & 1 deletion docker/Dockerfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ ENV PYTHONDONTWRITEBYTECODE 1
# Do not ever buffer console output
ENV PYTHONUNBUFFERED 1

RUN pip install --upgrade pip poetry pip install supervisor
RUN pip install --upgrade pip && pip install --upgrade poetry && pip install --upgrade supervisor

COPY poetry.lock pyproject.toml README.md config/supervisord.conf .gherkin-lintrc /app/
COPY src /app/src/
Expand Down
Loading