--- name: adding-api-versions description: Use when adding a new API version to the shopify-api package, creating REST resource files for a new version, updating API version constants, or handling breaking changes like removed or modified resources between versions. --- # Adding a New API Version Step-by-step process for adding a new API version to `packages/apps/shopify-api`. Uses 2025-07 as a reference example. ## Prerequisites - Know which resources are removed or modified in the new version ## Step 1: Update API Version Constants Edit `packages/apps/shopify-api/lib/types.ts`: ```typescript export enum ApiVersion { // ... existing versions ... April25 = '2025-04', July25 = '2025-07', // New version October25 = '2025-10', // Release candidate (next version) } ``` **Naming convention:** `{Month}{YY}` (e.g., `April25`, `July25`). Value format: `YYYY-MM`. Also add the **next** quarterly version as a release candidate enum value (no REST resources needed yet). ## Step 2: Create Directory Structure ```bash mkdir packages/apps/shopify-api/rest/admin/{YYYY-MM}/ mkdir packages/apps/shopify-api/rest/admin/__tests__/{YYYY-MM}/ ``` ## Step 3: Copy and Update Resource Files Copy from the most recent version: ```bash cp -r packages/apps/shopify-api/rest/admin/{PREVIOUS_VERSION}/* \ packages/apps/shopify-api/rest/admin/{NEW_VERSION}/ cp -r packages/apps/shopify-api/rest/admin/__tests__/{PREVIOUS_VERSION}/* \ packages/apps/shopify-api/rest/admin/__tests__/{NEW_VERSION}/ ``` In every resource file, update the `apiVersion` property: ```typescript // From public static apiVersion = ApiVersion.April25; // To public static apiVersion = ApiVersion.July25; ``` ## Step 4: Update Test Files Two changes in every test file: 1. **testConfig calls:** ```typescript testConfig({apiVersion: ApiVersion.July25, restResources}) ``` 2. **URL paths in expectations:** ```typescript `https://test-shop.myshopify.com/admin/api/2025-07/...` ``` ## Step 5: Update Index File Edit `packages/apps/shopify-api/rest/admin/{NEW_VERSION}/index.ts`: - Import all resources (except removed ones) - Update `RestResources` interface - Update `restResources` export For removed resources, delete their imports and exports: ```typescript // Remove from interface and export export interface RestResources extends ShopifyRestResources { // CustomerAddress: typeof CustomerAddress; // Removed in 2025-07 } ``` ## Step 6: Handle Breaking Changes For **removed resources** (e.g., CustomerAddress in 2025-07): 1. Delete the resource file from `rest/admin/{NEW_VERSION}/` 2. Delete the test file from `rest/admin/__tests__/{NEW_VERSION}/` 3. Remove imports/exports from `index.ts` For **modified resources**: 1. Update class properties 2. Modify `paths` array if endpoints changed 3. Update method signatures if parameters changed 4. Adjust tests accordingly ## Step 7: Run Tests and Build ```bash # Test the new version pnpm test -- packages/apps/shopify-api/rest/admin/__tests__/{NEW_VERSION} # Run all tests pnpm test ``` ## Checklist - [ ] New enum value in `ApiVersion` (`packages/apps/shopify-api/lib/types.ts`) - [ ] Next quarterly release candidate enum value added (no REST resources needed) - [ ] Source directory created: `rest/admin/{NEW_VERSION}/` - [ ] Test directory created: `rest/admin/__tests__/{NEW_VERSION}/` - [ ] All resource files copied and `apiVersion` updated - [ ] All test files updated (testConfig + URL paths) - [ ] `index.ts` updated with correct imports/exports - [ ] Removed resources and their tests deleted - [ ] Modified resources updated - [ ] All tests pass - [ ] Package builds without errors