Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
a33df71
linodego v2 (#973)
zliang-akamai May 27, 2026
f77d904
TPT-4470: Bump major version to v2 (#980)
zliang-akamai May 27, 2026
9222cc9
feat: add locks field to various resources (#942)
zliang-akamai May 29, 2026
198f6e7
build(deps): bump actions/dependency-review-action from 4 to 5 (#962)
dependabot[bot] May 29, 2026
a9e67ed
build(deps): bump golang.org/x/net from 0.54.0 to 0.55.0 (#977)
dependabot[bot] May 29, 2026
6bc7de6
build(deps): bump k8s.io/client-go from 0.29.4 to 0.35.5 (#965)
dependabot[bot] May 29, 2026
595faf9
TPT-4482: Add `AGENTS.md` (#981)
zliang-akamai Jun 1, 2026
fdd38e3
updating group_by at dashboard level (#979)
mawasthy-lgtm Jun 2, 2026
1e7add4
TPT-4470: add migration guide for linodego v2 (#984)
zliang-akamai Jun 2, 2026
8501733
Add LKE Nodepool Isolation field (#908)
aweingarten Jun 5, 2026
d1317cb
TPT-4446: Fix failing smoke tests (#974)
mawilk90 Jun 8, 2026
e38a399
init
yec-akamai Jun 8, 2026
096e5fe
lint
yec-akamai Jun 8, 2026
5a651b6
TPT-4277: Implement support for Reserved IP for IPv4 (#919)
mgwoj May 7, 2026
93e1b58
TPT-4432: Review and implement integration tests for ReservedIPs for …
mawilk90 May 21, 2026
6e31f1e
Fix test capabilities
lgarber-akamai Jun 9, 2026
cd5a180
omitempty -> omitzero
lgarber-akamai Jun 10, 2026
2242031
Merge pull request #987 from linode/proj/reserved-ips
lgarber-akamai Jun 10, 2026
d825cf6
Removed v2 from k8s module path (#994)
ezilber-akamai Jun 15, 2026
3e80244
address comments for omitzero
yec-akamai Jun 16, 2026
9caa537
lint
yec-akamai Jun 16, 2026
3158d36
TPT-4533: Check transport type before setting root certificate and lo…
zliang-akamai Jun 16, 2026
e87f7a3
Aclp logs support (#963)
klipensk Jun 22, 2026
cc14325
update comment
yec-akamai Jun 22, 2026
64498c5
ACLP clone alert definition and addition of group by field in alertin…
shkaruna Jun 25, 2026
fae2f67
Merge branch 'main' into feature/TPT-4463-add-int-tests-for-rdma-inte…
mawilk90 Jun 25, 2026
7ad1797
Refactor vpcCreateOptionsCheck to use createOpts
mawilk90 Jun 12, 2026
f50e4d8
Update fixtures
mawilk90 Jun 12, 2026
d55ecb3
Create int tests for VPC and VPC Subnet with RDMA type
mawilk90 Jun 12, 2026
4e37df4
Add assertion for regular VPC type
mawilk90 Jun 12, 2026
a79b214
Update vpcCreateOptionsCheck to use require
mawilk90 Jun 25, 2026
d3ea88e
Update error msg in TestVPC_Update_Invalid
mawilk90 Jun 26, 2026
a125e1b
Update fixtures for TestVPC_List tests
mawilk90 Jun 26, 2026
d6c8225
Update err msg for invalid label in VPC and Subnet tests
mawilk90 Jun 26, 2026
5bb7447
Add negative TCs for RDMA VPC with IPv6
mawilk90 Jun 26, 2026
3dd0cfd
Create int test for Linode instance with RDMA interfaces
mawilk90 Jun 29, 2026
26f3231
Refactor createInstanceWithLinodeInterfaces to use LinodeInstanceInte…
mawilk90 Jun 30, 2026
c818d3d
Refactor TestInstance_CreateWithRDMAVPCInterfaces to use createInstan…
mawilk90 Jun 30, 2026
30f157e
Small refactor & fixture update
mawilk90 Jun 30, 2026
73298fa
Merge branch 'proj/rdma-interfaces' into feature/TPT-4463-add-int-tes…
mawilk90 Jul 7, 2026
16da14e
Linter
mawilk90 Jul 7, 2026
411a2e7
Comment out TestInstance_CreateWithRDMAVPCInterfaces due to infra cha…
mawilk90 Jul 7, 2026
862400b
Update comment for TestVPC_WithRDMATypeIPv6_Fail
mawilk90 Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ body:
attributes:
label: API Wrapper Version
description: What version of our wrapper are you running?
placeholder: github.com/linode/linodego v1.0.0
placeholder: github.com/linode/linodego/v2 v2.0.0
validations:
required: true

Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@ name: Continuous Integration
on:
workflow_dispatch:
inputs:
run_aclp_logs_stream_tests:
description: 'Set this parameter to "true" to run ACLP logs stream related test cases'
required: false
default: 'false'
type: choice
options:
- 'true'
- 'false'
test_report_upload:
description: 'Indicates whether to upload the test report to object storage. Defaults to "false"'
type: choice
Expand Down Expand Up @@ -67,7 +75,7 @@ jobs:
gofumpt -l -w .
- name: Fail if changes
run: git diff-index --exit-code HEAD
run: git diff --exit-code HEAD

test:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -105,6 +113,7 @@ jobs:
make test | go-junit-report -set-exit-code -iocopy -out $REPORT_FILENAME
env:
SKIP_LINT: 1
RUN_ACLP_LOGS_STREAM_TESTS: ${{ github.event.inputs.run_aclp_logs_stream_tests }}

- name: Upload test results to bucket
if: always() && github.repository == 'linode/linodego' && github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && inputs.test_report_upload == 'true'))
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/integration_tests_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@ on:
pull_request:
workflow_dispatch:
inputs:
run_aclp_logs_stream_tests:
description: 'Set this parameter to "true" to run ACLP logs stream related test cases'
required: false
default: 'false'
type: choice
options:
- 'true'
- 'false'
sha:
description: 'The hash value of the commit.'
required: true
Expand Down Expand Up @@ -40,11 +48,13 @@ jobs:
if: ${{ inputs.module != '' && steps.disallowed-char-check.outputs.match == '' }}
env:
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}
RUN_ACLP_LOGS_STREAM_TESTS: ${{ github.event.inputs.run_aclp_logs_stream_tests }}

- run: make fixtures
if: ${{ inputs.module == '' }}
env:
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}
RUN_ACLP_LOGS_STREAM_TESTS: ${{ github.event.inputs.run_aclp_logs_stream_tests }}

- name: Get the hash value of the latest commit from the PR branch
uses: octokit/graphql-action@v2.x
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-cross-repo-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
cd linodego
linodego_dir=$(pwd)
cd ..
go mod edit -replace github.com/linode/linodego=$linodego_dir
go mod edit -replace github.com/linode/linodego/v2=$linodego_dir
go mod tidy
- name: run tests
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/security_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ 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

Expand Down
41 changes: 41 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# AGENTS.md

## Repo Shape
- This is a Go workspace (`go.work`) with three modules: root `github.com/linode/linodego/v2`, `./k8s`, and `./test`.
- Root package files implement the public API client; `k8s/` is a separate helper module for LKE Kubernetes client behavior; `test/` is a separate module for unit and integration tests and replaces both local modules.
- API resource files follow a flat root pattern (`instances.go`, `volumes.go`, etc.) and usually pair public types with `Client` methods that call helpers in `request_helpers.go`.

## Commands
- Full CI-like local check: `make test` runs build, lint, unit tests, and fixture-backed integration tests; it can be slow because `test-int` uses a 5h timeout.
- Faster focused default: run `go test ./...` at the repo root for root-module unit coverage only, then run focused tests in `test/` or `k8s/` as needed.
- Unit tests excluding integration playback: `make test-unit`; pass focused args as `make TEST_ARGS="-run TestName" test-unit`.
- Integration fixture playback: `make test-int`; focused playback: `make TEST_ARGS="-run TestListVolumes" test-int`.
- K8s module verification: `cd k8s && go test ./...` or use root `make build`/`make vet`, which enter `k8s/` explicitly.
- Tidy all modules after dependency changes: `make tidy`.

## Lint And Formatting
- `make lint` uses Docker by default: `docker run ... golangci/golangci-lint:latest`; set `SKIP_DOCKER=1` to use local `golangci-lint`.
- `golangci-lint fmt` is the preferred formatter, if available. Fallback to `gofumpt` if `golangci-lint` is unavailable. Fallback to `go fmt` if `gofumpt` is unavailable.
- `make build` already depends on `vet` and `lint`; use `SKIP_LINT=1 make test` only when intentionally matching CI's test job behavior.
- CI runs `make tidy`, then installs `gofumpt` at commit `86bffd62437a3c437c0b84d5d5ab244824e762fc` and runs `gofumpt -l -w .`, then fails on any diff.

## Tests And Fixtures
- `test/unit` uses embedded JSON fixtures from `test/unit/fixtures/*.json` and `ClientBaseCase` helpers in `test/unit/base.go`; add/update JSON fixtures there for unit tests.
- `test/integration` uses go-vcr YAML fixtures under `test/integration/fixtures`; `make test-int` runs them in replay mode with a fake token and `LINODE_API_VERSION=v4beta`.
- To record integration fixtures, set a real `LINODE_TOKEN` and run `make fixtures`; focus recording with `make TEST_ARGS="-run TestName" fixtures`.
- Fixture recording creates real Linode resources and `TestMain` creates a Cloud Firewall by default; set `ENABLE_CLOUD_FW=false` only if you intentionally want to skip that setup.
- Fixture sanitization is partial: auth headers, dates, some keys, and IPv6 are scrubbed, but `README.md` warns that sensitive account details such as `fixtures/*Account*.yaml` are not fully sanitized. Inspect recorded fixture diffs before committing.
- Smoke tests are live record-mode tests: `make test-smoke` requires `LINODE_TOKEN`.

## Environment
- `.env` is loaded by the root Makefile if present; `.gitignore` excludes it.
- Common env vars: `LINODE_TOKEN`, `LINODE_DEBUG`, `LINODE_URL`, `LINODE_API_VERSION`, `LINODE_CA`, `LINODE_CONFIG`, and `LINODE_PROFILE`.
- `NewClient` reads `LINODE_URL`, `LINODE_API_VERSION`, `LINODE_CA`, and `LINODE_DEBUG`; `NewClientFromEnv` prefers `LINODE_TOKEN` over config-file profiles.

## Conventions And Gotchas
- Optional fields in create or update options structs must use `json:",omitzero"`.
- Optional fields in create or update options structs must be pointer types so explicit zero values can be serialized when needed.
- List APIs mutate the supplied `*ListOptions` with `Page`, `Pages`, and `Results`; do not reuse one `ListOptions` across list calls.
- Use `formatAPIPath` for endpoint paths with user-provided string path segments so path escaping matches the client helpers.
- CI enforces PR titles like `TPT-1234: Description` unless labels exempt the PR (`dependencies`, `hotfix`, `community-contribution`, `ignore-for-release`).
- The `e2e_scripts` directory is a git submodule used by CI report/upload and cleanup jobs; clone/update submodules before reproducing those workflows.
17 changes: 10 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@

![Tests](https://img.shields.io/github/actions/workflow/status/linode/linodego/ci.yml?branch=main)
[![Release](https://img.shields.io/github/v/release/linode/linodego)](https://github.com/linode/linodego/releases/latest)
[![GoDoc](https://godoc.org/github.com/linode/linodego?status.svg)](https://godoc.org/github.com/linode/linodego)
[![Go Report Card](https://goreportcard.com/badge/github.com/linode/linodego)](https://goreportcard.com/report/github.com/linode/linodego)
[![GoDoc](https://godoc.org/github.com/linode/linodego/v2?status.svg)](https://godoc.org/github.com/linode/linodego/v2)
[![Go Report Card](https://goreportcard.com/badge/github.com/linode/linodego/v2)](https://goreportcard.com/report/github.com/linode/linodego/v2)

Go client for [Linode REST v4 API](https://techdocs.akamai.com/linode-api/reference/api)

## Installation

```sh
go get -u github.com/linode/linodego
go get -u github.com/linode/linodego/v2
```

## Documentation

See [godoc](https://godoc.org/github.com/linode/linodego) for a complete reference.
See [godoc](https://godoc.org/github.com/linode/linodego/v2) for a complete reference.

The API generally follows the naming patterns prescribed in the [OpenAPIv3 document for Linode APIv4](https://techdocs.akamai.com/linode-api/reference/api).

Expand All @@ -37,7 +37,7 @@ import (
"net/http"
"os"

"github.com/linode/linodego"
"github.com/linode/linodego/v2"
"golang.org/x/oauth2"
)

Expand All @@ -54,7 +54,10 @@ func main() {
},
}

linodeClient := linodego.NewClient(oauth2Client)
linodeClient, err := linodego.NewClient(oauth2Client)
if err != nil {
log.Fatal(err)
}
linodeClient.SetDebug(true)

res, err := linodeClient.GetInstance(context.Background(), 4090913)
Expand Down Expand Up @@ -149,7 +152,7 @@ linodes, err := linodego.ListInstances(context.Background(), linodego.NewListOpt
### Response Caching

By default, certain endpoints with static responses will be cached into memory.
Endpoints with cached responses are identified in their [accompanying documentation](https://pkg.go.dev/github.com/linode/linodego?utm_source=godoc).
Endpoints with cached responses are identified in their [accompanying documentation](https://pkg.go.dev/github.com/linode/linodego/v2?utm_source=godoc).

The default cache entry expiry time is `15` minutes. Certain endpoints may override this value to allow for more frequent refreshes (e.g. `client.GetRegion(...)`).
The global cache expiry time can be customized using the `client.SetGlobalCacheExpiration(...)` method.
Expand Down
26 changes: 13 additions & 13 deletions account.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// Account associated with the token in use.
Expand Down Expand Up @@ -34,18 +34,18 @@ type Account struct {

// AccountUpdateOptions fields are those accepted by UpdateAccount
type AccountUpdateOptions struct {
Address1 string `json:"address_1,omitempty"`
Address2 string `json:"address_2,omitempty"`
City string `json:"city,omitempty"`
Company string `json:"company,omitempty"`
Country string `json:"country,omitempty"`
Email string `json:"email,omitempty"`
FirstName string `json:"first_name,omitempty"`
LastName string `json:"last_name,omitempty"`
Phone string `json:"phone,omitempty"`
State string `json:"state,omitempty"`
TaxID string `json:"tax_id,omitempty"`
Zip string `json:"zip,omitempty"`
Address1 string `json:"address_1,omitzero"`
Address2 string `json:"address_2,omitzero"`
City string `json:"city,omitzero"`
Company string `json:"company,omitzero"`
Country string `json:"country,omitzero"`
Email string `json:"email,omitzero"`
FirstName string `json:"first_name,omitzero"`
LastName string `json:"last_name,omitzero"`
Phone string `json:"phone,omitzero"`
State string `json:"state,omitzero"`
TaxID string `json:"tax_id,omitzero"`
Zip string `json:"zip,omitzero"`
}

// GetUpdateOptions converts an Account to AccountUpdateOptions for use in UpdateAccount
Expand Down
6 changes: 3 additions & 3 deletions account_agreements.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ type AccountAgreements struct {

// AccountAgreementsUpdateOptions fields are those accepted by UpdateAccountAgreements
type AccountAgreementsUpdateOptions struct {
EUModel bool `json:"eu_model,omitempty"`
MasterServiceAgreement bool `json:"master_service_agreement,omitempty"`
PrivacyPolicy bool `json:"privacy_policy,omitempty"`
EUModel bool `json:"eu_model,omitzero"`
MasterServiceAgreement bool `json:"master_service_agreement,omitzero"`
PrivacyPolicy bool `json:"privacy_policy,omitzero"`
}

// GetUpdateOptions converts an AccountAgreements to AccountAgreementsUpdateOptions for use in UpdateAccountAgreements
Expand Down
2 changes: 1 addition & 1 deletion account_betas.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// AccountBetaProgram represents an enrolled Account Beta Program object,
Expand Down
22 changes: 2 additions & 20 deletions account_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/duration"
"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/duration"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// Event represents an action taken on the Account.
Expand Down Expand Up @@ -231,14 +231,6 @@ const (
ActionVPCSubnetCreate EventAction = "subnet_create"
ActionVPCSubnetDelete EventAction = "subnet_delete"
ActionVPCSubnetUpdate EventAction = "subnet_update"

// Deprecated: incorrect spelling,
// to be removed in the next major version release.
ActionVolumeDelte EventAction = "volume_delete"

// Deprecated: incorrect spelling,
// to be removed in the next major version
ActionCreateCardUpdated = ActionCreditCardUpdated
)

// EntityType constants start with Entity and include Linode API Event Entity Types
Expand Down Expand Up @@ -343,16 +335,6 @@ func (c *Client) GetEvent(ctx context.Context, eventID int) (*Event, error) {
return doGETRequest[Event](ctx, c, e)
}

// MarkEventRead marks a single Event as read.
//
// Deprecated: `MarkEventRead` is a deprecated API, please consider using `MarkEventsSeen` instead.
// Please note that the `MarkEventsSeen` API functions differently and will mark all events up to and
// including the referenced event-id as "seen" rather than individual events.
func (c *Client) MarkEventRead(ctx context.Context, event *Event) error {
e := formatAPIPath("account/events/%d/read", event.ID)
return doPOSTRequestNoRequestResponseBody(ctx, c, e)
}

// MarkEventsSeen marks all Events up to and including this Event by ID as seen.
func (c *Client) MarkEventsSeen(ctx context.Context, event *Event) error {
e := formatAPIPath("account/events/%d/seen", event.ID)
Expand Down
2 changes: 1 addition & 1 deletion account_invoices.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// Invoice structs reflect an invoice for billable activity on the account.
Expand Down
2 changes: 1 addition & 1 deletion account_logins.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

type Login struct {
Expand Down
6 changes: 1 addition & 5 deletions account_maintenance.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// AccountMaintenance represents a Maintenance object for any entity a user has permissions to view
Expand All @@ -22,9 +22,6 @@ type AccountMaintenance struct {
NotBefore *time.Time `json:"-"`
StartTime *time.Time `json:"-"`
CompleteTime *time.Time `json:"-"`

// Deprecated: When is a deprecated property
When *time.Time `json:"when"`
}

// Entity represents the entity being affected by maintenance
Expand Down Expand Up @@ -57,7 +54,6 @@ func (accountMaintenance *AccountMaintenance) UnmarshalJSON(b []byte) error {
accountMaintenance.NotBefore = (*time.Time)(p.NotBefore)
accountMaintenance.StartTime = (*time.Time)(p.StartTime)
accountMaintenance.CompleteTime = (*time.Time)(p.CompleteTime)
accountMaintenance.When = (*time.Time)(p.When)

return nil
}
Expand Down
2 changes: 1 addition & 1 deletion account_notifications.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// Notification represents a notification on an Account
Expand Down
2 changes: 1 addition & 1 deletion account_oauth_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,5 +111,5 @@ func (c *Client) DeleteOAuthClient(ctx context.Context, clientID string) error {
// ResetOAuthClientSecret resets the OAuth Client secret for a client with a specified id
func (c *Client) ResetOAuthClientSecret(ctx context.Context, clientID string) (*OAuthClient, error) {
e := formatAPIPath("account/oauth-clients/%s/reset-secret", clientID)
return doPOSTRequest[OAuthClient, any](ctx, c, e)
return doPOSTRequestNoRequestBody[OAuthClient](ctx, c, e)
}
2 changes: 1 addition & 1 deletion account_payment_methods.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"fmt"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// PaymentMethod represents a PaymentMethod object
Expand Down
4 changes: 2 additions & 2 deletions account_payments.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// Payment represents a Payment object
Expand All @@ -23,7 +23,7 @@ type Payment struct {
// PaymentCreateOptions fields are those accepted by CreatePayment
type PaymentCreateOptions struct {
// CVV (Card Verification Value) of the credit card to be used for the Payment
CVV string `json:"cvv,omitempty"`
CVV string `json:"cvv,omitzero"`

// The amount, in US dollars, of the Payment
USD json.Number `json:"usd"`
Expand Down
2 changes: 1 addition & 1 deletion account_promo_credits.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// Promotion represents a Promotion object
Expand Down
2 changes: 1 addition & 1 deletion account_service_transfer.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"time"

"github.com/linode/linodego/internal/parseabletime"
"github.com/linode/linodego/v2/internal/parseabletime"
)

// AccountServiceTransferStatus constants start with AccountServiceTransfer and
Expand Down
Loading
Loading