Skip to content

add spread test workflow#420

Merged
Thanhphan1147 merged 19 commits intomainfrom
ISD_5185_add_spread_testing_workflow
Apr 1, 2026
Merged

add spread test workflow#420
Thanhphan1147 merged 19 commits intomainfrom
ISD_5185_add_spread_testing_workflow

Conversation

@Thanhphan1147
Copy link
Copy Markdown
Collaborator

@Thanhphan1147 Thanhphan1147 commented Mar 30, 2026

Add spread testing workflow

Checklist

@Thanhphan1147 Thanhphan1147 requested a review from erinecon March 30, 2026 16:14
@Thanhphan1147 Thanhphan1147 requested a review from a team as a code owner March 30, 2026 16:14
@Thanhphan1147 Thanhphan1147 added documentation Improvements or additions to documentation no-release-note This PR does not require a change artifact labels Mar 30, 2026
Comment thread .github/workflows/docs_spread.yaml Outdated
@Thanhphan1147 Thanhphan1147 marked this pull request as draft March 30, 2026 16:56
@Thanhphan1147 Thanhphan1147 marked this pull request as draft March 30, 2026 16:56
Copy link
Copy Markdown
Contributor

@erinecon erinecon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks so much for working on adding a Spread test!! Some initial comments

Comment thread spread.yaml Outdated
Comment thread .github/workflows/docs_spread.yaml Outdated
@Thanhphan1147 Thanhphan1147 marked this pull request as ready for review March 30, 2026 22:57
@Thanhphan1147 Thanhphan1147 requested a review from erinecon March 30, 2026 22:57
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

license-eye has checked 403 files.

Valid Invalid Ignored Fixed
141 1 261 0
Click to see the invalid file list
  • spread.yaml
Use this command to fix any missing license headers
```bash

docker run -it --rm -v $(pwd):/github/workspace apache/skywalking-eyes header fix

</details>

Comment thread spread.yaml
…onical/haproxy-operator into ISD_5185_add_spread_testing_workflow
Copy link
Copy Markdown
Contributor

@erinecon erinecon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks so much!!

Comment thread .github/workflows/docs_spread.yaml Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 1, 2026

Test results for commit 29db5ab

Test coverage for 29db5ab

Name                                       Stmts   Miss Branch BrPart  Cover   Missing
--------------------------------------------------------------------------------------
lib/charms/haproxy/v0/ddos_protection.py     154     51     34      8    64%   157-174, 183-187, 288, 316-318, 323, 326-330, 342-344, 381, 387, 393, 396, 424, 495-498, 510-529
src/charm.py                                  21      0      0      0   100%
src/state.py                                  43      0      0      0   100%
--------------------------------------------------------------------------------------
TOTAL                                        218     51     34      8    73%

Static code analysis report

Run started:2026-03-31 23:32:49.447609+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 333
  Total lines skipped (#nosec): 0
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 0

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 1, 2026

Test results for commit 29db5ab

Test coverage for 29db5ab

Name                                         Stmts   Miss Branch BrPart  Cover   Missing
----------------------------------------------------------------------------------------
lib/charms/haproxy/v0/ddos_protection.py       154     42     34      3    72%   157-174, 183-187, 265, 284, 415-418, 422-424, 459-478, 514-529
lib/charms/haproxy/v0/spoe_auth.py             158     55     32      2    59%   203, 304-306, 315, 354-381, 392-402, 441-442, 459-472, 484-501, 522-525, 529-531
lib/charms/haproxy/v1/haproxy_route_tcp.py     385    153     78      8    56%   209, 212, 281, 290-293, 297-300, 318-321, 336, 342-347, 447, 452, 829-832, 836, 863-874, 897-900, 904-906, 926-928, 1042-1083, 1087-1093, 1097, 1166-1195, 1266-1305, 1335-1337, 1362-1364, 1386-1390, 1409-1411, 1429-1431, 1438-1444, 1452-1454, 1462-1463, 1474-1481, 1494-1505, 1513-1534, 1546-1547, 1558-1559, 1570-1573, 1584-1585, 1614-1623, 1639-1642, 1658-1669, 1685-1688, 1706-1717, 1728-1729, 1737-1738, 1746-1747, 1758-1761
lib/charms/haproxy/v2/haproxy_route.py         385     53     98     26    82%   181, 257, 266-269, 294-297, 318-323, 673-674, 860->exit, 867, 893-904, 927-930, 934-936, 955-957, 1129-1135, 1139, 1336->1338, 1340->1342, 1342->1344, 1344->1346, 1346->1348, 1348->1351, 1386, 1394, 1399, 1402, 1427, 1455, 1459, 1463, 1486, 1506, 1515-1516, 1518->exit, 1554-1556, 1576, 1590, 1595-1597
src/charm.py                                   286     69     78     11    71%   100, 228, 236-252, 257, 262, 279, 290, 296-297, 331-351, 455-463, 491-504, 517-522, 531, 544-545, 552, 562, 572, 578-584, 600, 650-653, 659->658, 672-675
src/haproxy.py                                 127     31      6      2    75%   110-116, 136-158, 268-269, 272, 280-286, 314, 344-355, 367-369, 379-380
src/http_interface.py                           73     25      4      0    62%   74, 83, 92, 106-108, 126, 138, 150, 162, 170-175, 187, 194, 202, 217-227
src/state/charm_state.py                        77     15     14      4    79%   93-95, 100-101, 104, 145-150, 159, 208-210, 222-223
src/state/ddos_protection.py                    39      0      2      0   100%
src/state/exception.py                           1      0      0      0   100%
src/state/ha.py                                 30      1      2      1    94%   50
src/state/haproxy_route.py                     197     14     60      5    90%   132, 161-170, 194, 227, 297, 346-348, 365
src/state/haproxy_route_tcp.py                 120     17     42      1    80%   92-94, 109->112, 147-160
src/state/ingress.py                            38      0      4      0   100%
src/state/ingress_per_unit.py                   32      0      4      0   100%
src/state/spoe_auth.py                          26      2      2      0    93%   63-64
src/state/tls.py                                39      7     12      4    78%   74, 77-78, 127-135, 141-142
src/state/validation.py                         46     23      8      1    44%   66-67, 71-98
src/tls_relation.py                             61      3     14      3    92%   86->85, 118-128, 140->142
----------------------------------------------------------------------------------------
TOTAL                                         2274    510    494     71    74%

Static code analysis report

Working... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Run started:2026-03-31 23:56:22.133753+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 10203
  Total lines skipped (#nosec): 13
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 10

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 1, 2026

Test results for commit 29db5ab

Test coverage for 29db5ab

Name                                    Stmts   Miss  Cover
-----------------------------------------------------------
haproxy_route_policy/__init__.py            0      0   100%
haproxy_route_policy/settings.py           29      1    97%
haproxy_route_policy/test_settings.py       4      0   100%
haproxy_route_policy/urls.py                5      0   100%
manage.py                                  11      2    82%
policy/__init__.py                          0      0   100%
policy/apps.py                              3      0   100%
policy/db_models.py                        49      2    96%
policy/middleware.py                       16      4    75%
policy/migrations/0001_initial.py           7      0   100%
policy/migrations/0002_rule.py              5      0   100%
policy/migrations/__init__.py               0      0   100%
policy/rule_engine.py                      36      1    97%
policy/serializers.py                      25      0   100%
policy/tests/__init__.py                    0      0   100%
policy/tests/test_auth.py                  36     20    44%
policy/tests/test_models.py                85      0   100%
policy/tests/test_rule_engine.py          117      0   100%
policy/tests/test_views.py                201      0   100%
policy/urls.py                              3      0   100%
policy/views.py                            83      6    93%
-----------------------------------------------------------
TOTAL                                     715     36    95%

Static code analysis report

Run started:2026-03-31 23:38:29.065764+00:00

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 1556
  Total lines skipped (#nosec): 1
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 0

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 1, 2026

Test results for commit 29db5ab

Test coverage for 29db5ab

Name                               Stmts   Miss Branch BrPart  Cover   Missing
------------------------------------------------------------------------------
src/charm.py                          45      9      2      0    77%   65-91, 96-98
src/haproxy_spoe_auth_service.py      44     16      2      0    61%   56-64, 76-82, 93-117
src/state.py                          55     15      6      1    67%   64-66, 79, 125-146
------------------------------------------------------------------------------
TOTAL                                144     40     10      1    68%

Static code analysis report

Run started:2026-04-01 00:07:26.261172

Test results:
  No issues identified.

Code scanned:
  Total lines of code: 409
  Total lines skipped (#nosec): 1
  Total potential issues skipped due to specifically being disabled (e.g., #nosec BXXX): 1

Run metrics:
  Total issues (by severity):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
  Total issues (by confidence):
  	Undefined: 0
  	Low: 0
  	Medium: 0
  	High: 0
Files skipped (0):

@Thanhphan1147 Thanhphan1147 enabled auto-merge (squash) April 1, 2026 08:38
@Thanhphan1147 Thanhphan1147 merged commit ae4e72f into main Apr 1, 2026
133 of 142 checks passed
@Thanhphan1147 Thanhphan1147 deleted the ISD_5185_add_spread_testing_workflow branch April 1, 2026 10:08
Thanhphan1147 added a commit that referenced this pull request Apr 2, 2026
Thanhphan1147 added a commit that referenced this pull request Apr 24, 2026
* Implement request API

* update model validation before save and add unit tests

* use environment variables for secret key

* ISD-5226 update docs landing pages (#387)

* update how-to landing page

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* add summary for each section

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* Update docs/how-to/index.md

Co-authored-by: Erin Conley <erin.conley@canonical.com>

---------

Co-authored-by: Erin Conley <erin.conley@canonical.com>

* ruff format

* add secret key for testing

* remove port attribute from test

* add requirements.txt for testing

* reintroduce port field

* Add change artifact

* run lint with uv

* add unit testing

* remove custom test

* update migration

* Wrap creation under `transaction.atomic`

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* remove unused code

* minor fixes to settings

* use django serializer

* update gitignore

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* update view to use django rest

* remove python-version

* update gitignore

* add missing license headers

* Add rules engine

* update migration

* update view

* fix lint

* remove extra tests

* add validation and update tests

* update view

* remove to_dict

* use serializer for get

* use serializer

* remove unused tests

* use filter for delete query

* update tests and move validation to serializer class

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* remove license header from generated files

* Update haproxy-route-policy/policy/migrations/0001_initial.py

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Revert "Update haproxy-route-policy/policy/migrations/0001_initial.py"

This reverts commit 10a2708.

* ignore migration files for license header

* add change artifact

* add envlist to tox commands

* update envlist

* convert pk to uuid for requests

* Add guard against mal-formed uuid and parameter. Add logging configs,  Add middleware to guard against db connection errors

* add validators for port and paths

* add tests for validators

* add note for migration

* remove unused imports

* add static tests

* guard rules API against pk

* update view, middle wares and tests

* chore(deps): update dependency haproxy-spoe-auth to v75 (#406)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* refactor tests by parametrizing

* chore(deps): update dependency haproxy-spoe-auth to v77 (#408)

* chore(deps): update dependency haproxy-spoe-auth to v77

* fix(tests): Fix root integration tests by ignoring route-policy specific tests.

* chore: fmt files

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ali Ugur <ali.ugur@canonical.com>

* group tests by parameterizing

* refactor Rule model to rename attribute from "value" to "parameters"

* update test name

* update naming

* Add coverage-report as part of unit test suite

* update env list

* implement rule evaluation

* add change artifact

* update imports

* update naming

* update rules matching logic

* update tests

* save request using serializer with the correct instace

* Haproxy route policy rules api (#400)

* group tests

* update formatting

* Add authentication configuration for django-restframework and adapt tests for auth

* add change artifact

* Add token urls

* switch DB engine to postgres

* add change artifact

* Add snap files

* fix build issue

* update module-name

* set secret key as default, drop fetching from file

* update readme, fix secret key generation

* add change artifact

* add build snap workflow

* use upload-artifact v4

* update path

* add checkout step

* change working dir for build action

* sparse checkout the policy directory

* debug

* debug path

* remove debug

* update scripts to guard against empty DB config values and update allowed-hosts to be more restrictive

* update docs link

* fix(deps): update all non-major dependencies (#381)

* fix(deps): update all non-major dependencies

* Test a fix for the RTD workflows

* Update Python version to 3.12

* Revert change to uses key

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Erin Conley <erin.conley@canonical.com>
Co-authored-by: swetha1654 <swetha.swaminathan@canonical.com>

* fix(deps): update dependency cryptography to v46.0.6 [security] (#418)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Haproxy route policy rules matching (#401)

* Implement request API

* update model validation before save and add unit tests

* use environment variables for secret key

* ruff format

* add secret key for testing

* remove port attribute from test

* add requirements.txt for testing

* reintroduce port field

* Add change artifact

* run lint with uv

* add unit testing

* remove custom test

* update migration

* Wrap creation under `transaction.atomic`

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* remove unused code

* minor fixes to settings

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* use django serializer

* update gitignore

* update view to use django rest

* remove python-version

* update gitignore

* add missing license headers

* Add rules engine

* update migration

* update view

* fix lint

* remove extra tests

* add validation and update tests

* update view

* remove to_dict

* use serializer for get

* use serializer

* remove unused tests

* use filter for delete query

* update tests and move validation to serializer class

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update haproxy-route-policy/policy/migrations/0001_initial.py

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Revert "Update haproxy-route-policy/policy/migrations/0001_initial.py"

This reverts commit 10a2708.

* ignore migration files for license header

* remove license header from generated files

* add change artifact

* add envlist to tox commands

* update envlist

* convert pk to uuid for requests

* Add guard against mal-formed uuid and parameter. Add logging configs,  Add middleware to guard against db connection errors

* add validators for port and paths

* add tests for validators

* add note for migration

* ruff format

* remove unused imports

* add static tests

* guard rules API against pk

* update view, middle wares and tests

* refactor tests by parametrizing

* group tests by parameterizing

* refactor Rule model to rename attribute from "value" to "parameters"

* update test name

* update naming

* Add coverage-report as part of unit test suite

* update env list

* implement rule evaluation

* add change artifact

* update imports

* update naming

* update rules matching logic

* update tests

* save request using serializer with the correct instace

* group tests

* update formatting

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ali UĞUR <39213991+alithethird@users.noreply.github.com>

* chore: update Copilot collections to v0.8.0 (#419)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* use python3 to run manage script instead of uv

* bump snap version

* add spread test workflow (#420)

* fix: add proper type to hosts in haproxy libraries (#383)

* update docs for postgresql container

* Update haproxy-route-policy/snap/hooks/configure

Co-authored-by: Ali UĞUR <39213991+alithethird@users.noreply.github.com>

* address comments

* add tests for snap

* shell script lint fix

* update manage script

* revert script change

* fix shellcheck errors

* Fix drifts from main

* remove 10s sleep

* wait for snap service to settle

* set config to start the snap

* add MVP for haproxy-roite-policy-operator

* simplify charm mbp

* properly handles postgresql charm state and fix lint errors

* fix unit and reformat tox

* update snap config dict

* update tox config and add integration test

* add change artifact

* run integration tests for haproxy-route-policy-operator

* add secret handling, update tests

* ignore bandit rules

* add action, fix issue with command run

* add change artifact

* add upsertsuperuser command

* block until peer relation and set a value after creating a secret to trigger peer unit reconcile

* add peer relation definition and only run migration/update user if leader

* move juju secret handling to charm state, add charm state for policy related values, add unit tests

* cast to string before dumping to json

* add change artifact

* bootstrap lib

* update fetch logic for admin credentials, update tests, update juju version to 3.6

* move juju secret handling to charm state, add charm state for policy related values, add unit tests

* cast to string before dumping to json

* add change artifact

* update handling of credentials

* bootstrap lib

* bootstrap haproxy-route-policy lib

* update lib, fix test issues

* add autoapprove logic and add integration tests with any-charm

* update uv.lock

* wait for complete relation data

* update charm and requirer

* update integration tests

* remove unused lib and update tests and lib

* remove haproxy-route from charm-libs

* run integration test for haproxy-route-policy

* ruff fmt

* add change artifact

* update change artifacts

* fix failing tests

* explicitly hint types, update uv lock, update tests

* remove docstring

* update lib patch version

* update business logic

* update logic to send haproxy route policy data to provider

* update password length checks

* don't use self-hosted runner for unit tests

* update unit test wf

* update runs-on tag

* rename

* update unit tests

* query the API to refresh backend requests

* remove merge errors

* fix rendering bug for gprc backends

* add test for grpc backend rendering

* thin out the client

* add relation interface, add global test

* add relation interface

* move exception handling to a separate state module, refactor charm code

* small fixes

* fix unit tests

* add static assets

* update db schema, add static files to gunicorn, update business logic

* update custom view in admin panel, fix small issue with model validation

* Update haproxy-route-policy-operator/charmcraft.yaml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix issues in PR

* minor fixes

* update method and add change artifact

* expose policy provider via a backend, update tests

* add trusted origins to snap config

* set secure proxy header for haproxy

* update template, conditionally render haproxy-route-policy backend when relation is present

* add change artifact

* add change artifact

* Add comments for django DEBUG mode

* Add change artifact

* add logic to set allowed-hosts if haproxy has sent a proxied-endpoint

* send policy hostname via relation data

* update scheme in hostname

* update lib for serialization and update logic

* fix merge conflicts

* resolve merge conflicts

* resolve merge conflicts, update snap, remove unused conf

* resolve conflicts

* add change artifact

* update lib schema to not send a HttpUrl but send the hostname directly

* update lib schema to not send a HttpUrl but send the hostname directly

* rework charm logic to avoid dead zones

* update test

* add context docstring

* move whitenoise and remove debug

* update serving static files, disabling debug mode

* correctly use gunicorn bin

* hook update status to the reconcile loop

* add change artifact

* Add an action to refresh backend requests on-demand

* update integration tests

* fix typo

* fix missing import

---------

Co-authored-by: Erin Conley <erin.conley@canonical.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ali Ugur <ali.ugur@canonical.com>
Co-authored-by: swetha1654 <swetha.swaminathan@canonical.com>
Co-authored-by: Ali UĞUR <39213991+alithethird@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation Libraries: Out of sync no-release-note This PR does not require a change artifact

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants