Skip to content

Commit 715f3c4

Browse files
authored
Merge pull request #13 from Nekotoxin/migrate_to_github_action
fix: Migrate to GitHub action
2 parents e53d75b + 7d3125f commit 715f3c4

18 files changed

+248
-132
lines changed

.coveragerc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[run]
2+
include = casbin_adapter/*
3+
omit = *migrations*, *tests*

.github/semantic.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Always validate the PR title AND all the commits
2+
titleAndCommits: true

.github/workflows/build.yml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
name: build
2+
on:
3+
push:
4+
branches: [master]
5+
pull_request:
6+
branches: [master]
7+
8+
jobs:
9+
test:
10+
runs-on: ${{ matrix.os }}
11+
strategy:
12+
fail-fast: false
13+
matrix:
14+
python-version: ['3.7', '3.8', '3.9', '3.10']
15+
os: [ubuntu-18.04, macOS-latest, windows-latest]
16+
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v2
20+
21+
- name: Set up Python ${{ matrix.python-version }}
22+
uses: actions/setup-python@v2
23+
with:
24+
python-version: ${{ matrix.python-version }}
25+
26+
- name: Install dependencies
27+
run: |
28+
pip install -r requirements_dev.txt
29+
pip install coveralls
30+
pip install pytest
31+
32+
- name: Run tests
33+
run: coverage run -m django test --settings=tests.settings
34+
35+
- name: Upload coverage data to coveralls.io
36+
run: coveralls --service=github
37+
env:
38+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39+
COVERALLS_FLAG_NAME: ${{ matrix.os }} - ${{ matrix.python-version }}
40+
COVERALLS_PARALLEL: true
41+
42+
lint:
43+
name: Run Linters
44+
runs-on: ubuntu-latest
45+
steps:
46+
- name: Checkout
47+
uses: actions/checkout@v2
48+
with:
49+
fetch-depth: 0
50+
51+
- name: Super-Linter
52+
uses: github/super-linter@v4.9.2
53+
env:
54+
VALIDATE_ALL_CODEBASE: false
55+
VALIDATE_PYTHON_BLACK: true
56+
DEFAULT_BRANCH: master
57+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58+
LINTER_RULES_PATH: /
59+
PYTHON_BLACK_CONFIG_FILE: pyproject.toml
60+
61+
coveralls:
62+
name: Indicate completion to coveralls.io
63+
needs: test
64+
runs-on: ubuntu-latest
65+
container: python:3-slim
66+
steps:
67+
- name: Finished
68+
run: |
69+
pip3 install --upgrade coveralls
70+
coveralls --finish
71+
env:
72+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
73+
74+
release:
75+
name: Release
76+
runs-on: ubuntu-latest
77+
needs: [ test, coveralls ]
78+
steps:
79+
- name: Checkout
80+
uses: actions/checkout@v2
81+
with:
82+
fetch-depth: 0
83+
84+
- name: Setup Node.js
85+
uses: actions/setup-node@v2
86+
with:
87+
node-version: '16'
88+
89+
- name: Setup
90+
run: npm install -g semantic-release @semantic-release/github @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/git @semantic-release/release-notes-generator semantic-release-pypi
91+
92+
- name: Set up python
93+
uses: actions/setup-python@v2
94+
with:
95+
python-version: 3.8
96+
97+
- name: Install setuptools
98+
run: python -m pip install --upgrade setuptools wheel twine
99+
100+
- name: Release
101+
env:
102+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
103+
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
104+
run: npx semantic-release

.releaserc.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"branches": "master",
3+
"plugins": [
4+
"@semantic-release/commit-analyzer",
5+
"@semantic-release/release-notes-generator",
6+
"semantic-release-pypi",
7+
"@semantic-release/github",
8+
[
9+
"@semantic-release/changelog",
10+
{
11+
"changelogFile": "CHANGELOG.md",
12+
"changelogTitle": "# Semantic Versioning Changelog"
13+
}
14+
],
15+
[
16+
"@semantic-release/git",
17+
{
18+
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}",
19+
"assets": ["CHANGELOG.md", "setup.py", "setup.cfg"]
20+
}
21+
]
22+
]
23+
}

.travis.yml

Lines changed: 0 additions & 23 deletions
This file was deleted.

casbin_adapter/adapter.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,22 @@ def add_policy(self, sec, ptype, rule):
5353

5454
def remove_policy(self, sec, ptype, rule):
5555
"""removes a policy rule from the storage."""
56-
query_params = {'ptype': ptype}
56+
query_params = {"ptype": ptype}
5757
for i, v in enumerate(rule):
58-
query_params['v{}'.format(i)] = v
58+
query_params["v{}".format(i)] = v
5959
rows_deleted, _ = CasbinRule.objects.filter(**query_params).delete()
6060
return True if rows_deleted > 0 else False
6161

6262
def remove_filtered_policy(self, sec, ptype, field_index, *field_values):
6363
"""removes policy rules that match the filter from the storage.
6464
This is part of the Auto-Save feature.
6565
"""
66-
query_params = {'ptype': ptype}
67-
if not(0 <= field_index <= 5):
66+
query_params = {"ptype": ptype}
67+
if not (0 <= field_index <= 5):
6868
return False
6969
if not (1 <= field_index + len(field_values) <= 6):
7070
return False
7171
for i, v in enumerate(field_values):
72-
query_params['v{}'.format(i + field_index)] = v
72+
query_params["v{}".format(i + field_index)] = v
7373
rows_deleted, _ = CasbinRule.objects.filter(**query_params).delete()
7474
return True if rows_deleted > 0 else False

casbin_adapter/apps.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55

66
class CasbinAdapterConfig(AppConfig):
7-
name = 'casbin_adapter'
7+
name = "casbin_adapter"
88

99
def ready(self):
1010
from .enforcer import initialize_enforcer
11-
initialize_enforcer()
1211

12+
initialize_enforcer()

casbin_adapter/enforcer.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,48 @@
1111
logger = logging.getLogger(__name__)
1212

1313

14-
1514
class ProxyEnforcer(Enforcer):
1615
_initialized = False
1716

1817
def __init__(self, *args, **kwargs):
1918
if self._initialized:
2019
super().__init__(*args, **kwargs)
2120
else:
22-
logger.info('Deferring casbin enforcer initialisation until django is ready')
21+
logger.info("Deferring casbin enforcer initialisation until django is ready")
2322

2423
def _load(self):
2524
if self._initialized == False:
26-
logger.info('Performing deferred casbin enforcer initialisation')
25+
logger.info("Performing deferred casbin enforcer initialisation")
2726
self._initialized = True
28-
model = getattr(settings, 'CASBIN_MODEL')
29-
enable_log = getattr(settings, 'CASBIN_LOG_ENABLED', False)
30-
adapter_loc = getattr(settings, 'CASBIN_ADAPTER', 'casbin_adapter.adapter.Adapter')
31-
adapter_args = getattr(settings, 'CASBIN_ADAPTER_ARGS', tuple())
27+
model = getattr(settings, "CASBIN_MODEL")
28+
enable_log = getattr(settings, "CASBIN_LOG_ENABLED", False)
29+
adapter_loc = getattr(settings, "CASBIN_ADAPTER", "casbin_adapter.adapter.Adapter")
30+
adapter_args = getattr(settings, "CASBIN_ADAPTER_ARGS", tuple())
3231
Adapter = import_class(adapter_loc)
3332
adapter = Adapter(*adapter_args)
3433

3534
super().__init__(model, adapter, enable_log)
36-
logger.debug('Casbin enforcer initialised')
35+
logger.debug("Casbin enforcer initialised")
3736

38-
watcher = getattr(settings, 'CASBIN_WATCHER', None)
37+
watcher = getattr(settings, "CASBIN_WATCHER", None)
3938
if watcher:
4039
self.set_watcher(watcher)
4140

42-
role_manager = getattr(settings, 'CASBIN_ROLE_MANAGER', None)
41+
role_manager = getattr(settings, "CASBIN_ROLE_MANAGER", None)
4342
if role_manager:
4443
self.set_role_manager(role_manager)
4544

4645
def __getattribute__(self, name):
47-
safe_methods = ['__init__', '_load', '_initialized']
48-
if not super().__getattribute__('_initialized') and name not in safe_methods:
46+
safe_methods = ["__init__", "_load", "_initialized"]
47+
if not super().__getattribute__("_initialized") and name not in safe_methods:
4948
initialize_enforcer()
50-
if not super().__getattribute__('_initialized'):
51-
raise Exception((
52-
"Calling enforcer attributes before django registry is ready. "
53-
"Prevent making any calls to the enforcer on import/startup"
54-
))
49+
if not super().__getattribute__("_initialized"):
50+
raise Exception(
51+
(
52+
"Calling enforcer attributes before django registry is ready. "
53+
"Prevent making any calls to the enforcer on import/startup"
54+
)
55+
)
5556

5657
return super().__getattribute__(name)
5758

@@ -73,4 +74,3 @@ def initialize_enforcer():
7374
enforcer._load()
7475
except (OperationalError, ProgrammingError):
7576
pass
76-

casbin_adapter/migrations/0001_initial.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,23 @@ class Migration(migrations.Migration):
77

88
initial = True
99

10-
dependencies = [
11-
]
10+
dependencies = []
1211

1312
operations = [
1413
migrations.CreateModel(
15-
name='CasbinRule',
14+
name="CasbinRule",
1615
fields=[
17-
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18-
('ptype', models.CharField(max_length=255)),
19-
('v0', models.CharField(max_length=255)),
20-
('v1', models.CharField(max_length=255)),
21-
('v2', models.CharField(max_length=255)),
22-
('v3', models.CharField(max_length=255)),
23-
('v4', models.CharField(max_length=255)),
24-
('v5', models.CharField(max_length=255)),
16+
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
17+
("ptype", models.CharField(max_length=255)),
18+
("v0", models.CharField(max_length=255)),
19+
("v1", models.CharField(max_length=255)),
20+
("v2", models.CharField(max_length=255)),
21+
("v3", models.CharField(max_length=255)),
22+
("v4", models.CharField(max_length=255)),
23+
("v5", models.CharField(max_length=255)),
2524
],
2625
options={
27-
'db_table': 'casbin_rule',
26+
"db_table": "casbin_rule",
2827
},
2928
),
3029
]

casbin_adapter/models.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,23 @@ class CasbinRule(models.Model):
1313
v5 = models.CharField(max_length=255)
1414

1515
class Meta:
16-
db_table = 'casbin_rule'
16+
db_table = "casbin_rule"
1717

1818
def __str__(self):
1919
text = self.ptype
2020

2121
if self.v0:
22-
text = text + ', ' + self.v0
22+
text = text + ", " + self.v0
2323
if self.v1:
24-
text = text + ', ' + self.v1
24+
text = text + ", " + self.v1
2525
if self.v2:
26-
text = text + ', ' + self.v2
26+
text = text + ", " + self.v2
2727
if self.v3:
28-
text = text + ', ' + self.v3
28+
text = text + ", " + self.v3
2929
if self.v4:
30-
text = text + ', ' + self.v4
30+
text = text + ", " + self.v4
3131
if self.v5:
32-
text = text + ', ' + self.v5
32+
text = text + ", " + self.v5
3333
return text
3434

3535
def __repr__(self):

0 commit comments

Comments
 (0)