bec-slurm-manager 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bec_slurm_manager-1.0.1/.env.example +5 -0
- bec_slurm_manager-1.0.1/.github/workflows/check_pr.yml +28 -0
- bec_slurm_manager-1.0.1/.github/workflows/ci.yml +51 -0
- bec_slurm_manager-1.0.1/.github/workflows/formatter.yml +16 -0
- bec_slurm_manager-1.0.1/.github/workflows/go_worker.yml +48 -0
- bec_slurm_manager-1.0.1/.github/workflows/semantic_release.yml +93 -0
- bec_slurm_manager-1.0.1/.github/workflows/unit_tests.yml +18 -0
- bec_slurm_manager-1.0.1/.gitignore +208 -0
- bec_slurm_manager-1.0.1/.vscode/settings.json +7 -0
- bec_slurm_manager-1.0.1/CHANGELOG.md +146 -0
- bec_slurm_manager-1.0.1/PKG-INFO +20 -0
- bec_slurm_manager-1.0.1/README.md +96 -0
- bec_slurm_manager-1.0.1/assets/slurm-manager.png +0 -0
- bec_slurm_manager-1.0.1/examples/print_for_10s.sh +5 -0
- bec_slurm_manager-1.0.1/examples/submit_job.py +76 -0
- bec_slurm_manager-1.0.1/pyproject.toml +103 -0
- bec_slurm_manager-1.0.1/slurm_manager/__init__.py +0 -0
- bec_slurm_manager-1.0.1/slurm_manager/event_messages.py +66 -0
- bec_slurm_manager-1.0.1/slurm_manager/job_future.py +267 -0
- bec_slurm_manager-1.0.1/slurm_manager/job_options.py +104 -0
- bec_slurm_manager-1.0.1/slurm_manager/job_tracker.py +697 -0
- bec_slurm_manager-1.0.1/slurm_manager/redis_sub_client.py +323 -0
- bec_slurm_manager-1.0.1/slurm_manager/slurm_manager.py +451 -0
- bec_slurm_manager-1.0.1/slurm_manager/slurm_rest_client.py +296 -0
- bec_slurm_manager-1.0.1/test/fixtures/curl_stub.py +50 -0
- bec_slurm_manager-1.0.1/test/integration/test_ra.py +239 -0
- bec_slurm_manager-1.0.1/test/test_job_options.py +51 -0
- bec_slurm_manager-1.0.1/test/test_job_script.py +48 -0
- bec_slurm_manager-1.0.1/test/test_job_tracker.py +142 -0
- bec_slurm_manager-1.0.1/test/test_redis_pubsub_client.py +116 -0
- bec_slurm_manager-1.0.1/test/test_slurm_manager.py +599 -0
- bec_slurm_manager-1.0.1/test/test_slurm_rest_client.py +213 -0
- bec_slurm_manager-1.0.1/test/test_worker_packages.py +200 -0
- bec_slurm_manager-1.0.1/worker/.goreleaser.yaml +65 -0
- bec_slurm_manager-1.0.1/worker/Makefile +14 -0
- bec_slurm_manager-1.0.1/worker/README.md +36 -0
- bec_slurm_manager-1.0.1/worker/cmd/bec-slurm-worker/main.go +44 -0
- bec_slurm_manager-1.0.1/worker/cmd/bec-slurm-worker/main_test.go +70 -0
- bec_slurm_manager-1.0.1/worker/go.mod +15 -0
- bec_slurm_manager-1.0.1/worker/go.sum +24 -0
- bec_slurm_manager-1.0.1/worker/internal/worker/worker.go +341 -0
- bec_slurm_manager-1.0.1/worker/internal/worker/worker_test.go +400 -0
- bec_slurm_manager-1.0.1/worker/scripts/upload-packages.sh +98 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Check PR status for branch
|
|
2
|
+
on:
|
|
3
|
+
workflow_call:
|
|
4
|
+
outputs:
|
|
5
|
+
branch-pr:
|
|
6
|
+
description: The PR number if the branch is in one
|
|
7
|
+
value: ${{ jobs.pr.outputs.branch-pr }}
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
pr:
|
|
11
|
+
runs-on: "ubuntu-latest"
|
|
12
|
+
outputs:
|
|
13
|
+
branch-pr: ${{ steps.script.outputs.result }}
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/github-script@v7
|
|
16
|
+
id: script
|
|
17
|
+
if: github.event_name == 'push'
|
|
18
|
+
with:
|
|
19
|
+
script: |
|
|
20
|
+
const prs = await github.rest.pulls.list({
|
|
21
|
+
owner: context.repo.owner,
|
|
22
|
+
repo: context.repo.repo,
|
|
23
|
+
head: context.repo.owner + ':${{ github.ref_name }}'
|
|
24
|
+
})
|
|
25
|
+
if (prs.data.length) {
|
|
26
|
+
console.log(`::notice ::Skipping CI on branch push as it is already run in PR #${prs.data[0]["number"]}`)
|
|
27
|
+
return prs.data[0]["number"]
|
|
28
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Full CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
pull_request:
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
|
|
7
|
+
concurrency:
|
|
8
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
9
|
+
cancel-in-progress: true
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
pull-requests: write
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
check_pr_status:
|
|
16
|
+
uses: ./.github/workflows/check_pr.yml
|
|
17
|
+
|
|
18
|
+
formatter:
|
|
19
|
+
needs: check_pr_status
|
|
20
|
+
if: needs.check_pr_status.outputs.branch-pr == ''
|
|
21
|
+
uses: ./.github/workflows/formatter.yml
|
|
22
|
+
|
|
23
|
+
unit_tests:
|
|
24
|
+
needs: check_pr_status
|
|
25
|
+
if: needs.check_pr_status.outputs.branch-pr == ''
|
|
26
|
+
uses: ./.github/workflows/unit_tests.yml
|
|
27
|
+
|
|
28
|
+
go_worker:
|
|
29
|
+
needs: check_pr_status
|
|
30
|
+
if: needs.check_pr_status.outputs.branch-pr == ''
|
|
31
|
+
uses: ./.github/workflows/go_worker.yml
|
|
32
|
+
|
|
33
|
+
publish_worker:
|
|
34
|
+
needs: [formatter, unit_tests, go_worker]
|
|
35
|
+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
permissions:
|
|
38
|
+
contents: read
|
|
39
|
+
actions: read
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
with:
|
|
43
|
+
persist-credentials: false
|
|
44
|
+
- uses: actions/download-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: bec-slurm-worker-packages
|
|
47
|
+
path: worker/dist
|
|
48
|
+
- name: Publish Linux archives and RPMs to Gitea
|
|
49
|
+
env:
|
|
50
|
+
GITEA_REGISTRY_TOKEN: ${{ secrets.GITEA_REGISTRY_TOKEN }}
|
|
51
|
+
run: bash worker/scripts/upload-packages.sh "${GITHUB_REF_NAME#v}"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: Ruff
|
|
2
|
+
on: [workflow_call]
|
|
3
|
+
jobs:
|
|
4
|
+
Ruff:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
steps:
|
|
7
|
+
- uses: actions/checkout@v4
|
|
8
|
+
- uses: actions/setup-python@v5
|
|
9
|
+
with:
|
|
10
|
+
python-version: "3.13"
|
|
11
|
+
- name: Install dependencies
|
|
12
|
+
run: python -m pip install -e '.[dev]'
|
|
13
|
+
- name: Check imports and lint
|
|
14
|
+
run: ruff check .
|
|
15
|
+
- name: Check formatting
|
|
16
|
+
run: ruff format --check .
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Go worker
|
|
2
|
+
on: [workflow_call]
|
|
3
|
+
jobs:
|
|
4
|
+
worker:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
defaults:
|
|
7
|
+
run:
|
|
8
|
+
working-directory: worker
|
|
9
|
+
steps:
|
|
10
|
+
- uses: actions/checkout@v4
|
|
11
|
+
with:
|
|
12
|
+
fetch-depth: 0
|
|
13
|
+
- uses: actions/setup-go@v6
|
|
14
|
+
with:
|
|
15
|
+
go-version-file: worker/go.mod
|
|
16
|
+
cache-dependency-path: worker/go.sum
|
|
17
|
+
- name: Check formatting
|
|
18
|
+
run: test -z "$(gofmt -l .)"
|
|
19
|
+
- name: Test and vet
|
|
20
|
+
run: make test
|
|
21
|
+
- uses: goreleaser/goreleaser-action@v7
|
|
22
|
+
with:
|
|
23
|
+
distribution: goreleaser
|
|
24
|
+
version: v2.18.0
|
|
25
|
+
install-only: true
|
|
26
|
+
- name: Select package version
|
|
27
|
+
shell: bash
|
|
28
|
+
run: |
|
|
29
|
+
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
|
|
30
|
+
version="${GITHUB_REF_NAME#v}"
|
|
31
|
+
else
|
|
32
|
+
version="0.0.0-dev.${GITHUB_RUN_NUMBER}.g${GITHUB_SHA:0:12}"
|
|
33
|
+
fi
|
|
34
|
+
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$ ]]; then
|
|
35
|
+
echo 'Expected a semantic version after the v tag prefix.' >&2
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
printf 'BUILD_VERSION=%s\n' "$version" >> "$GITHUB_ENV"
|
|
39
|
+
- name: Build Linux archives and RPMs
|
|
40
|
+
run: make package VERSION="$BUILD_VERSION"
|
|
41
|
+
- uses: actions/upload-artifact@v4
|
|
42
|
+
with:
|
|
43
|
+
name: bec-slurm-worker-packages
|
|
44
|
+
if-no-files-found: error
|
|
45
|
+
path: |
|
|
46
|
+
worker/dist/*.tar.gz
|
|
47
|
+
worker/dist/*.rpm
|
|
48
|
+
worker/dist/checksums.txt
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
name: Continuous Delivery
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
# default: least privileged permissions across all jobs
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
concurrency:
|
|
16
|
+
group: ${{ github.workflow }}-release-${{ github.ref_name }}
|
|
17
|
+
cancel-in-progress: false
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: write
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
# Note: We checkout the repository at the branch that triggered the workflow
|
|
24
|
+
# with the entire history to ensure to match PSR's release branch detection
|
|
25
|
+
# and history evaluation.
|
|
26
|
+
# However, we forcefully reset the branch to the workflow sha because it is
|
|
27
|
+
# possible that the branch was updated while the workflow was running. This
|
|
28
|
+
# prevents accidentally releasing un-evaluated changes.
|
|
29
|
+
- name: Setup | Checkout Repository on Release Branch
|
|
30
|
+
uses: actions/checkout@v6
|
|
31
|
+
with:
|
|
32
|
+
ref: ${{ github.ref_name }}
|
|
33
|
+
fetch-depth: 0
|
|
34
|
+
ssh-key: ${{ secrets.CI_DEPLOY_SSH_KEY }}
|
|
35
|
+
ssh-known-hosts: ${{ secrets.CI_DEPLOY_SSH_KNOWN_HOSTS }}
|
|
36
|
+
|
|
37
|
+
- name: Set up Python
|
|
38
|
+
uses: actions/setup-python@v6
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.13"
|
|
41
|
+
|
|
42
|
+
- name: Setup | Force release branch to be at workflow sha
|
|
43
|
+
run: |
|
|
44
|
+
git reset --hard ${{ github.sha }}
|
|
45
|
+
- name: Evaluate | Verify upstream has NOT changed
|
|
46
|
+
# Last chance to abort before causing an error as another PR/push was applied to
|
|
47
|
+
# the upstream branch while this workflow was running. This is important
|
|
48
|
+
# because we are committing a version change (--commit). You may omit this step
|
|
49
|
+
# if you have 'commit: false' in your configuration.
|
|
50
|
+
shell: bash
|
|
51
|
+
run: |
|
|
52
|
+
set +o pipefail
|
|
53
|
+
|
|
54
|
+
UPSTREAM_BRANCH_NAME="$(git status -sb | head -n 1 | cut -d' ' -f2 | grep -E '\.{3}' | cut -d'.' -f4)"
|
|
55
|
+
printf '%s\n' "Upstream branch name: $UPSTREAM_BRANCH_NAME"
|
|
56
|
+
|
|
57
|
+
set -o pipefail
|
|
58
|
+
|
|
59
|
+
if [ -z "$UPSTREAM_BRANCH_NAME" ]; then
|
|
60
|
+
printf >&2 '%s\n' "::error::Unable to determine upstream branch name!"
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
git fetch "${UPSTREAM_BRANCH_NAME%%/*}"
|
|
65
|
+
|
|
66
|
+
if ! UPSTREAM_SHA="$(git rev-parse "$UPSTREAM_BRANCH_NAME")"; then
|
|
67
|
+
printf >&2 '%s\n' "::error::Unable to determine upstream branch sha!"
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
HEAD_SHA="$(git rev-parse HEAD)"
|
|
72
|
+
|
|
73
|
+
if [ "$HEAD_SHA" != "$UPSTREAM_SHA" ]; then
|
|
74
|
+
printf >&2 '%s\n' "[HEAD SHA] $HEAD_SHA != $UPSTREAM_SHA [UPSTREAM SHA]"
|
|
75
|
+
printf >&2 '%s\n' "::error::Upstream has changed, aborting release..."
|
|
76
|
+
exit 1
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
printf '%s\n' "Verified upstream branch has not changed, continuing with release..."
|
|
80
|
+
|
|
81
|
+
- name: Semantic Version Release
|
|
82
|
+
id: release
|
|
83
|
+
env:
|
|
84
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
85
|
+
TWINE_USERNAME: __token__
|
|
86
|
+
TWINE_PASSWORD: ${{ secrets.CI_PYPI_TOKEN }}
|
|
87
|
+
run: |
|
|
88
|
+
python -m pip install "python-semantic-release==9.*" wheel build twine
|
|
89
|
+
semantic-release -vv version
|
|
90
|
+
if [ ! -d dist ]; then echo No release will be made; exit 0; fi
|
|
91
|
+
twine check dist/*
|
|
92
|
+
twine upload --verbose dist/* --skip-existing
|
|
93
|
+
semantic-release publish
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: Unit tests
|
|
2
|
+
on: [workflow_call]
|
|
3
|
+
jobs:
|
|
4
|
+
UnitTests:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
strategy:
|
|
7
|
+
fail-fast: false
|
|
8
|
+
matrix:
|
|
9
|
+
python-version: ["3.12", "3.13", "3.14"]
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: actions/setup-python@v5
|
|
13
|
+
with:
|
|
14
|
+
python-version: ${{ matrix.python-version }}
|
|
15
|
+
- name: Install dependencies
|
|
16
|
+
run: python -m pip install -e '.[dev]'
|
|
17
|
+
- name: Run unit tests
|
|
18
|
+
run: python -m pytest --random-order -q test
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
*venv/
|
|
22
|
+
var/
|
|
23
|
+
wheels/
|
|
24
|
+
share/python-wheels/
|
|
25
|
+
*.egg-info/
|
|
26
|
+
.installed.cfg
|
|
27
|
+
*.egg
|
|
28
|
+
MANIFEST
|
|
29
|
+
|
|
30
|
+
# PyInstaller
|
|
31
|
+
# Usually these files are written by a python script from a template
|
|
32
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
33
|
+
*.manifest
|
|
34
|
+
*.spec
|
|
35
|
+
|
|
36
|
+
# Installer logs
|
|
37
|
+
pip-log.txt
|
|
38
|
+
pip-delete-this-directory.txt
|
|
39
|
+
|
|
40
|
+
# Unit test / coverage reports
|
|
41
|
+
htmlcov/
|
|
42
|
+
.tox/
|
|
43
|
+
.nox/
|
|
44
|
+
.coverage
|
|
45
|
+
.coverage.*
|
|
46
|
+
.cache
|
|
47
|
+
nosetests.xml
|
|
48
|
+
coverage.xml
|
|
49
|
+
*.cover
|
|
50
|
+
*.py.cover
|
|
51
|
+
.hypothesis/
|
|
52
|
+
.pytest_cache/
|
|
53
|
+
cover/
|
|
54
|
+
|
|
55
|
+
# Translations
|
|
56
|
+
*.mo
|
|
57
|
+
*.pot
|
|
58
|
+
|
|
59
|
+
# Django stuff:
|
|
60
|
+
*.log
|
|
61
|
+
local_settings.py
|
|
62
|
+
db.sqlite3
|
|
63
|
+
db.sqlite3-journal
|
|
64
|
+
|
|
65
|
+
# Flask stuff:
|
|
66
|
+
instance/
|
|
67
|
+
.webassets-cache
|
|
68
|
+
|
|
69
|
+
# Scrapy stuff:
|
|
70
|
+
.scrapy
|
|
71
|
+
|
|
72
|
+
# Sphinx documentation
|
|
73
|
+
docs/_build/
|
|
74
|
+
|
|
75
|
+
# PyBuilder
|
|
76
|
+
.pybuilder/
|
|
77
|
+
target/
|
|
78
|
+
|
|
79
|
+
# Jupyter Notebook
|
|
80
|
+
.ipynb_checkpoints
|
|
81
|
+
|
|
82
|
+
# IPython
|
|
83
|
+
profile_default/
|
|
84
|
+
ipython_config.py
|
|
85
|
+
|
|
86
|
+
# pyenv
|
|
87
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
88
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
89
|
+
# .python-version
|
|
90
|
+
|
|
91
|
+
# pipenv
|
|
92
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
93
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
94
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
95
|
+
# install all needed dependencies.
|
|
96
|
+
#Pipfile.lock
|
|
97
|
+
|
|
98
|
+
# UV
|
|
99
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
100
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
101
|
+
# commonly ignored for libraries.
|
|
102
|
+
#uv.lock
|
|
103
|
+
|
|
104
|
+
# poetry
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
106
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
107
|
+
# commonly ignored for libraries.
|
|
108
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
109
|
+
#poetry.lock
|
|
110
|
+
#poetry.toml
|
|
111
|
+
|
|
112
|
+
# pdm
|
|
113
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
114
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
115
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
116
|
+
#pdm.lock
|
|
117
|
+
#pdm.toml
|
|
118
|
+
.pdm-python
|
|
119
|
+
.pdm-build/
|
|
120
|
+
|
|
121
|
+
# pixi
|
|
122
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
123
|
+
#pixi.lock
|
|
124
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
125
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
126
|
+
.pixi
|
|
127
|
+
|
|
128
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
129
|
+
__pypackages__/
|
|
130
|
+
|
|
131
|
+
# Celery stuff
|
|
132
|
+
celerybeat-schedule
|
|
133
|
+
celerybeat.pid
|
|
134
|
+
|
|
135
|
+
# SageMath parsed files
|
|
136
|
+
*.sage.py
|
|
137
|
+
|
|
138
|
+
# Environments
|
|
139
|
+
.env
|
|
140
|
+
.envrc
|
|
141
|
+
.venv
|
|
142
|
+
env/
|
|
143
|
+
venv/
|
|
144
|
+
ENV/
|
|
145
|
+
env.bak/
|
|
146
|
+
venv.bak/
|
|
147
|
+
|
|
148
|
+
# Spyder project settings
|
|
149
|
+
.spyderproject
|
|
150
|
+
.spyproject
|
|
151
|
+
|
|
152
|
+
# Rope project settings
|
|
153
|
+
.ropeproject
|
|
154
|
+
|
|
155
|
+
# mkdocs documentation
|
|
156
|
+
/site
|
|
157
|
+
|
|
158
|
+
# mypy
|
|
159
|
+
.mypy_cache/
|
|
160
|
+
.dmypy.json
|
|
161
|
+
dmypy.json
|
|
162
|
+
|
|
163
|
+
# Pyre type checker
|
|
164
|
+
.pyre/
|
|
165
|
+
|
|
166
|
+
# pytype static type analyzer
|
|
167
|
+
.pytype/
|
|
168
|
+
|
|
169
|
+
# Cython debug symbols
|
|
170
|
+
cython_debug/
|
|
171
|
+
|
|
172
|
+
# PyCharm
|
|
173
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
174
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
175
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
176
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
177
|
+
#.idea/
|
|
178
|
+
|
|
179
|
+
# Abstra
|
|
180
|
+
# Abstra is an AI-powered process automation framework.
|
|
181
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
182
|
+
# Learn more at https://abstra.io/docs
|
|
183
|
+
.abstra/
|
|
184
|
+
|
|
185
|
+
# Visual Studio Code
|
|
186
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
187
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
188
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
189
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
190
|
+
# .vscode/
|
|
191
|
+
|
|
192
|
+
# Ruff stuff:
|
|
193
|
+
.ruff_cache/
|
|
194
|
+
|
|
195
|
+
# PyPI configuration file
|
|
196
|
+
.pypirc
|
|
197
|
+
|
|
198
|
+
# Cursor
|
|
199
|
+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
200
|
+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
201
|
+
# refer to https://docs.cursor.com/context/ignore-files
|
|
202
|
+
.cursorignore
|
|
203
|
+
.cursorindexingignore
|
|
204
|
+
|
|
205
|
+
# Marimo
|
|
206
|
+
marimo/_static/
|
|
207
|
+
marimo/_lsp/
|
|
208
|
+
__marimo__/
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## v1.0.1 (2026-10-28)
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
- Rename PyPI distribution to bec-slurm-manager
|
|
9
|
+
([`f34a4a5`](https://github.com/bec-project/slurm_manager/commit/f34a4a5e22d84de405b1a6f657a1817c8b8fe68f))
|
|
10
|
+
|
|
11
|
+
### Documentation
|
|
12
|
+
|
|
13
|
+
- Use BEC Slurm Manager as README title
|
|
14
|
+
([`71d00c9`](https://github.com/bec-project/slurm_manager/commit/71d00c972b0791d315f900fb8ff4f68435820532))
|
|
15
|
+
|
|
16
|
+
### Testing
|
|
17
|
+
|
|
18
|
+
- Add opt-in RA lifecycle and module smoke tests
|
|
19
|
+
([`19971ef`](https://github.com/bec-project/slurm_manager/commit/19971ef8a9157ab3a249c5aba8d84165af08b19e))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## v1.0.0 (2026-10-28)
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
- Apply manager listeners to current and future jobs
|
|
27
|
+
([`cb82628`](https://github.com/bec-project/slurm_manager/commit/cb8262809f98c797e896fe5b9bfc1b90e6df8343))
|
|
28
|
+
|
|
29
|
+
- Dispatch terminal statuses and log callback failures
|
|
30
|
+
([`8bc0149`](https://github.com/bec-project/slurm_manager/commit/8bc0149b3569c8ba284eca0619b215bab9b7bd2a))
|
|
31
|
+
|
|
32
|
+
- **ci**: Validate worker bundles and resume package uploads
|
|
33
|
+
([`9b8ca5e`](https://github.com/bec-project/slurm_manager/commit/9b8ca5eed8ffdd87d12dd49e10294713e9d91d7f))
|
|
34
|
+
|
|
35
|
+
- **worker**: Honor cancellation grace for child processes
|
|
36
|
+
([`c46a8f8`](https://github.com/bec-project/slurm_manager/commit/c46a8f81080b8d76b6c9b67a413cdee9b76af1c5))
|
|
37
|
+
|
|
38
|
+
### Continuous Integration
|
|
39
|
+
|
|
40
|
+
- Test and build the Go worker
|
|
41
|
+
([`6fa1d30`](https://github.com/bec-project/slurm_manager/commit/6fa1d30b47ef6c344b0666431b94acb72762e066))
|
|
42
|
+
|
|
43
|
+
- Validate distributions and show PyPI upload errors
|
|
44
|
+
([`1779368`](https://github.com/bec-project/slurm_manager/commit/177936846f53461bcf84e643cf58c4fa4ecbf340))
|
|
45
|
+
|
|
46
|
+
### Documentation
|
|
47
|
+
|
|
48
|
+
- Add job submission examples and project icon
|
|
49
|
+
([`aa01055`](https://github.com/bec-project/slurm_manager/commit/aa010550e77578c6fc07e5dd67659edaf75671f1))
|
|
50
|
+
|
|
51
|
+
- Preserve line breaks in live log example
|
|
52
|
+
([`97e731d`](https://github.com/bec-project/slurm_manager/commit/97e731d6cb3337ca5367403bccaa933a7f16c0cd))
|
|
53
|
+
|
|
54
|
+
### Features
|
|
55
|
+
|
|
56
|
+
- Package bec-slurm-worker for Linux and RPM deployment
|
|
57
|
+
([`4477cc1`](https://github.com/bec-project/slurm_manager/commit/4477cc11be1ac8ff5069cbb931d334bca074b92e))
|
|
58
|
+
|
|
59
|
+
- Submit Slurm jobs through REST and track execution
|
|
60
|
+
([`4d17ce9`](https://github.com/bec-project/slurm_manager/commit/4d17ce9d548075f60eb466ae9227e9a9da12a397))
|
|
61
|
+
|
|
62
|
+
- **worker**: Add standalone Go job runner
|
|
63
|
+
([`790ca5b`](https://github.com/bec-project/slurm_manager/commit/790ca5b396ed3d2362b7e384911b6fd71d4821de))
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## v0.1.0 (2026-10-28)
|
|
67
|
+
|
|
68
|
+
### Bug Fixes
|
|
69
|
+
|
|
70
|
+
- Address Slurm job monitoring and subscription review findings
|
|
71
|
+
([`afcf5fb`](https://github.com/bec-project/slurm_manager/commit/afcf5fbe65c5293ed60a129cc5e4eba2eb04d492))
|
|
72
|
+
|
|
73
|
+
- Cleanup
|
|
74
|
+
([`b44b216`](https://github.com/bec-project/slurm_manager/commit/b44b21661214574d9c6351e89c9a02722f961cc1))
|
|
75
|
+
|
|
76
|
+
- Fix vscode settings and formatting
|
|
77
|
+
([`3db18d6`](https://github.com/bec-project/slurm_manager/commit/3db18d6583bfdbed1c518a3ed71cf0707bed3b47))
|
|
78
|
+
|
|
79
|
+
- Formatting
|
|
80
|
+
([`b9ad35a`](https://github.com/bec-project/slurm_manager/commit/b9ad35a51d5895cddc63b5bac790aa5e2e2163d2))
|
|
81
|
+
|
|
82
|
+
- Route clustered jobs and serialize callback registration
|
|
83
|
+
([`24a8fa8`](https://github.com/bec-project/slurm_manager/commit/24a8fa889458ace13b80191bb088db3181a9e6d2))
|
|
84
|
+
|
|
85
|
+
### Chores
|
|
86
|
+
|
|
87
|
+
- Add .gitignore file with common Python ignores
|
|
88
|
+
([`2ebc5f2`](https://github.com/bec-project/slurm_manager/commit/2ebc5f273d746d130404e05a3038a11037f2e1a2))
|
|
89
|
+
|
|
90
|
+
- Add venv to gitignore
|
|
91
|
+
([`0f3e1e0`](https://github.com/bec-project/slurm_manager/commit/0f3e1e0e40e22935a6761ddeacc16af770649930))
|
|
92
|
+
|
|
93
|
+
### Continuous Integration
|
|
94
|
+
|
|
95
|
+
- Add ci actions
|
|
96
|
+
([`fd54d2b`](https://github.com/bec-project/slurm_manager/commit/fd54d2b1a8ea88b80e1a8723c6bf4d2071babb1d))
|
|
97
|
+
|
|
98
|
+
- Add semantic release workflow
|
|
99
|
+
([`36c858a`](https://github.com/bec-project/slurm_manager/commit/36c858aa43baffad0ccaac79a78627606629f0f2))
|
|
100
|
+
|
|
101
|
+
Closes #5.
|
|
102
|
+
|
|
103
|
+
- Separate unit tests and cover Python 3.12 through 3.14
|
|
104
|
+
([`63c58ce`](https://github.com/bec-project/slurm_manager/commit/63c58ce824c87fe127d13c85b24a9782e47da5be))
|
|
105
|
+
|
|
106
|
+
### Features
|
|
107
|
+
|
|
108
|
+
- Add redis_pubsub_client
|
|
109
|
+
([`b685051`](https://github.com/bec-project/slurm_manager/commit/b685051d8cc01f540191073fd209565fbbd643f7))
|
|
110
|
+
|
|
111
|
+
- Bash wrapper for job
|
|
112
|
+
([`4ef8646`](https://github.com/bec-project/slurm_manager/commit/4ef8646ca775d4ce5137805ada38f3082d3b4129))
|
|
113
|
+
|
|
114
|
+
- Initial commit
|
|
115
|
+
([`0b9782d`](https://github.com/bec-project/slurm_manager/commit/0b9782d751218cf3abe3f7247a4251b385c14fad))
|
|
116
|
+
|
|
117
|
+
- Slurmmanager, JobFuture and RedisSubClient initial implementation
|
|
118
|
+
([`0164768`](https://github.com/bec-project/slurm_manager/commit/01647688e93acb1bbd0baa306ae8d081c68eb4a6))
|
|
119
|
+
|
|
120
|
+
- **job-future**: Add JobFuture implementation for monitoring running slurm jobs.
|
|
121
|
+
([`aa863c8`](https://github.com/bec-project/slurm_manager/commit/aa863c80f3b6272cfd638deef8fa467ffe48b727))
|
|
122
|
+
|
|
123
|
+
- **slurm-manager**: First imlementation of SlurmManager
|
|
124
|
+
([`3019d6e`](https://github.com/bec-project/slurm_manager/commit/3019d6e50534781ee3585e27cf3922da09121574))
|
|
125
|
+
|
|
126
|
+
### Refactoring
|
|
127
|
+
|
|
128
|
+
- Add slurm job id to SubscriptionInfo and to metadata
|
|
129
|
+
([`aa2b3e5`](https://github.com/bec-project/slurm_manager/commit/aa2b3e5389ff0254e6f7248dc9c04f2071d9e039))
|
|
130
|
+
|
|
131
|
+
- Address PR comments
|
|
132
|
+
([`5d7b9d4`](https://github.com/bec-project/slurm_manager/commit/5d7b9d4034c98f3b6a2e7781ea1895ef5012a521))
|
|
133
|
+
|
|
134
|
+
- Fix pyproject and add readme
|
|
135
|
+
([`bb6e43f`](https://github.com/bec-project/slurm_manager/commit/bb6e43fe7473ee4981f8966c3083519a6b3f8ae6))
|
|
136
|
+
|
|
137
|
+
- Simplify redis_worker.sh and use jq for json bash parsing
|
|
138
|
+
([`1685e88`](https://github.com/bec-project/slurm_manager/commit/1685e88a1af49de96969c1ddf624ed5f08125519))
|
|
139
|
+
|
|
140
|
+
- **slurm-manager**: Refactor job_info to pydantic, and cleanup
|
|
141
|
+
([`a64bb84`](https://github.com/bec-project/slurm_manager/commit/a64bb843b95516344e23fae5f48640bd86d299c2))
|
|
142
|
+
|
|
143
|
+
### Testing
|
|
144
|
+
|
|
145
|
+
- Fix test for test_redis_pubsub_client
|
|
146
|
+
([`86d3a9e`](https://github.com/bec-project/slurm_manager/commit/86d3a9ee14234d1b80dcbae90dab1097930554ca))
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: bec-slurm-manager
|
|
3
|
+
Version: 1.0.1
|
|
4
|
+
Summary: A tool for managing slurm jobs.
|
|
5
|
+
Project-URL: Bug Tracker, https://github.com/bec-project/slurm_manager/issues
|
|
6
|
+
Project-URL: Homepage, https://github.com/bec-project/slurm_manager
|
|
7
|
+
Project-URL: changelog, https://github.com/bec-project/slurm_manager/blob/main/CHANGELOG.md
|
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Topic :: Scientific/Engineering
|
|
11
|
+
Requires-Python: >=3.11
|
|
12
|
+
Requires-Dist: pydantic~=2.12.0
|
|
13
|
+
Requires-Dist: python-dotenv~=1.2
|
|
14
|
+
Requires-Dist: redis[hiredis]<9.0,>=6.2
|
|
15
|
+
Provides-Extra: dev
|
|
16
|
+
Requires-Dist: coverage~=7.0; extra == 'dev'
|
|
17
|
+
Requires-Dist: fakeredis>=2.23.2,~=2.23; extra == 'dev'
|
|
18
|
+
Requires-Dist: pytest-random-order~=1.1; extra == 'dev'
|
|
19
|
+
Requires-Dist: pytest~=8.0; extra == 'dev'
|
|
20
|
+
Requires-Dist: ruff~=0.17.1; extra == 'dev'
|