Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
34fbbab
Migrate from os.path to pathlib for file path handling (#654)
zliang-akamai Mar 5, 2026
26e964f
project: Block Storage Volume Limit Increase (#635)
lgarber-akamai Mar 9, 2026
d18b54e
Drop support for ScaleGrid databases (#649)
dawiddzhafarov Mar 10, 2026
fa417d5
python-sdk: Support regions/vpc-availability endpoints (#646)
mgwoj Mar 12, 2026
cdfcd3d
Fix invalid error assertion in VPC integration tests (#667)
lgarber-akamai Mar 12, 2026
c10fadc
TPT-4213: Fix assertion for database engine config integration test (…
dawiddzhafarov Mar 20, 2026
c77ec6d
TPT-3809: Added DiskEncryption field for LKE Node Pool creation (#670)
ezilber-akamai Mar 25, 2026
c9e18a5
TPT-4318: Add @linode/dx-sdets to CODEOWNERS (#671)
lgarber-akamai Mar 25, 2026
d692eef
TPT-4324: Allow dict passthrough for config_create 'devices' field; u…
lgarber-akamai Mar 30, 2026
47e620e
TPT-4298: Added PR title checking to lint workflow and clean up relea…
ezilber-akamai Apr 2, 2026
c3a77de
build(deps): bump actions/upload-artifact from 6 to 7 (#658)
dependabot[bot] Apr 7, 2026
fc2e33c
build(deps): bump slackapi/slack-github-action from 2.1.1 to 3 (#668)
dependabot[bot] Apr 7, 2026
02cd383
Remove content field from list alert channels response (#675)
shkaruna Apr 8, 2026
ecb5c3c
feat: add ACLP list entities method (#674)
shkaruna Apr 9, 2026
206a792
Cleanup block storage encryption LA notice (#655)
zliang-akamai Apr 13, 2026
c39c868
build(deps): bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (…
dependabot[bot] Apr 16, 2026
9535d63
Use e2e firewall in all linode interface tests (#685)
zliang-akamai Apr 16, 2026
03c5f8c
Remove outdated note about Linode interfaces availability (#683)
zliang-akamai Apr 20, 2026
1a32329
TPT-4224: Add global quotas and quota usage support for OBJ services …
zliang-akamai May 4, 2026
4fec1e5
ACLP: Cleanup entity related response fields from alert definition (#…
shkaruna May 5, 2026
b690c4f
build(deps): bump actions/github-script from 8 to 9 (#682)
dependabot[bot] May 6, 2026
7bf9b4d
docs: update API documentation links in Lock classes (#679)
zliang-akamai May 7, 2026
bf13f2e
build(deps): bump actions/dependency-review-action from 4 to 5 (#695)
dependabot[bot] May 12, 2026
8985109
Change assignments type from dict to list (#687)
mawilk90 May 12, 2026
68772a8
Update Images in integration tests (#694)
yec-akamai May 12, 2026
368aed4
Add support for firewall rules version and fingerprint (#656)
zliang-akamai May 12, 2026
dfc536e
TPT-4113: Project SLADE + CLEO (#696)
ezilber-akamai May 12, 2026
fcc41e5
Fix failing integration test (#697)
ezilber-akamai May 13, 2026
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
30 changes: 29 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,35 @@ on:
jobs:
lint:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
steps:
# Enforce TPT-1234: prefix on PR titles, with the following exemptions:
# - PRs labeled 'dependencies' (e.g. Dependabot PRs)
# - PRs labeled 'hotfix' (urgent fixes that may not have a ticket)
# - PRs labeled 'community-contribution' (external contributors without TPT tickets)
# - PRs labeled 'ignore-for-release' (release PRs that don't need a ticket prefix)
- name: Validate PR Title
if: github.event_name == 'pull_request'
uses: amannn/action-semantic-pull-request@v6
with:
types: |
TPT-\d+
requireScope: false
# Override the default header pattern to allow hyphens and digits in the type
# (e.g. "TPT-4298: Description"). The default pattern only matches word
# characters (\w) which excludes hyphens.
headerPattern: '^([\w-]+):\s?(.*)$'
headerPatternCorrespondence: type, subject
ignoreLabels: |
dependencies
hotfix
community-contribution
ignore-for-release
env:
GITHUB_TOKEN: ${{ github.token }}

- name: checkout repo
uses: actions/checkout@v6

Expand All @@ -31,7 +59,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
Expand Down
37 changes: 37 additions & 0 deletions .github/workflows/clean-release-notes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Clean Release Notes

on:
release:
types: [published]

jobs:
clean-release-notes:
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Remove ticket prefixes from release notes
uses: actions/github-script@v9
with:
script: |
const release = context.payload.release;

let body = release.body;

if (!body) {
console.log("Release body empty, nothing to clean.");
return;
}

// Remove ticket prefixes like "TPT-1234: " or "TPT-1234:"
body = body.replace(/TPT-\d+:\s*/g, '');

await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.id,
body: body
});

console.log("Release notes cleaned.");
2 changes: 1 addition & 1 deletion .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ jobs:
- name: 'Checkout repository'
uses: actions/checkout@v6
- name: 'Dependency Review'
uses: actions/dependency-review-action@v4
uses: actions/dependency-review-action@v5
with:
comment-summary-in-pr: on-failure
2 changes: 1 addition & 1 deletion .github/workflows/e2e-test-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ jobs:
LINODE_CLI_OBJ_ACCESS_KEY: ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }}
LINODE_CLI_OBJ_SECRET_KEY: ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}

- uses: actions/github-script@v8
- uses: actions/github-script@v9
id: update-check-run
if: ${{ inputs.pull_request_number != '' && fromJson(steps.commit-hash.outputs.data).repository.pullRequest.headRef.target.oid == inputs.sha }}
env:
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ on:
- dev

env:
DEFAULT_PYTHON_VERSION: "3.10"
EOL_PYTHON_VERSION: "3.9"
DEFAULT_PYTHON_VERSION: "3.13"
EOL_PYTHON_VERSION: "3.10"
EXIT_STATUS: 0

jobs:
Expand Down Expand Up @@ -105,7 +105,7 @@ jobs:

- name: Upload Test Report as Artifact
if: always()
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: test-report-file
if-no-files-found: ignore
Expand Down Expand Up @@ -241,7 +241,7 @@ jobs:
steps:
- name: Notify Slack
id: main_message
uses: slackapi/slack-github-action@v2.1.1
uses: slackapi/slack-github-action@v3
with:
method: chat.postMessage
token: ${{ secrets.SLACK_BOT_TOKEN }}
Expand Down Expand Up @@ -273,7 +273,7 @@ jobs:

- name: Test summary thread
if: success()
uses: slackapi/slack-github-action@v2.1.1
uses: slackapi/slack-github-action@v3
with:
method: chat.postMessage
token: ${{ secrets.SLACK_BOT_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nightly-smoke-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:

- name: Notify Slack
if: always() && github.repository == 'linode/linode_api4-python'
uses: slackapi/slack-github-action@v2.1.1
uses: slackapi/slack-github-action@v3
with:
method: chat.postMessage
token: ${{ secrets.SLACK_BOT_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ jobs:
LINODE_SDK_VERSION: ${{ github.event.release.tag_name }}

- name: Publish the release artifacts to PyPI
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # pin@release/v1.13.0
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # pin@release/v1.14.0
2 changes: 1 addition & 1 deletion .github/workflows/release-notify-slack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
steps:
- name: Notify Slack - Main Message
id: main_message
uses: slackapi/slack-github-action@v2.1.1
uses: slackapi/slack-github-action@v3
with:
method: chat.postMessage
token: ${{ secrets.SLACK_BOT_TOKEN }}
Expand Down
3 changes: 1 addition & 2 deletions CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
* @linode/dx

* @linode/dx @linode/dx-sdets
6 changes: 3 additions & 3 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
# documentation root, use Path(...).absolute() to make it absolute, like shown here.
#
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
from pathlib import Path
sys.path.insert(0, str(Path('..').absolute()))


# -- Project information -----------------------------------------------------
Expand Down
8 changes: 4 additions & 4 deletions linode_api4/common.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import os
from dataclasses import dataclass
from pathlib import Path

from linode_api4.objects import JSONObject

Expand Down Expand Up @@ -47,9 +47,9 @@ def load_and_validate_keys(authorized_keys):
ret.append(k)
else:
# it doesn't appear to be a key.. is it a path to the key?
k = os.path.expanduser(k)
if os.path.isfile(k):
with open(k) as f:
k_path = Path(k).expanduser()
if k_path.is_file():
with open(k_path) as f:
ret.append(f.read().rstrip())
else:
raise ValueError(
Expand Down
Loading
Loading