From 9bf4da7bb18eb63a1053fbe681dbc790bc6e6711 Mon Sep 17 00:00:00 2001 From: Oleksandr Shchur Date: Fri, 5 Jun 2026 08:41:36 +0000 Subject: [PATCH] Bump versions post-release --- cloudformation/ag_cloud_ray_aws.yaml | 128 ---------------------- cloudformation/ag_cloud_sagemaker.yaml | 58 ---------- docs/ReleaseInstructions.md | 142 ++++++++++--------------- docs/conf.py | 2 +- setup.py | 2 +- 5 files changed, 61 insertions(+), 271 deletions(-) delete mode 100644 cloudformation/ag_cloud_ray_aws.yaml delete mode 100644 cloudformation/ag_cloud_sagemaker.yaml diff --git a/cloudformation/ag_cloud_ray_aws.yaml b/cloudformation/ag_cloud_ray_aws.yaml deleted file mode 100644 index 64873eb1..00000000 --- a/cloudformation/ag_cloud_ray_aws.yaml +++ /dev/null @@ -1,128 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Description: 'CloudFormation template for AutoGluon-Cloud to run on an AWS Ray cluster' - -Resources: - AGCloudRayBucket: - Type: 'AWS::S3::Bucket' - Properties: - BucketName: !Sub - - '${AWS::StackName}-bucket-${suffix}' - - suffix: !Select [0, !Split ['-', !Select [2, !Split ['/', !Ref 'AWS::StackId']]]] - VersioningConfiguration: - Status: Enabled - PublicAccessBlockConfiguration: - BlockPublicAcls: true - BlockPublicPolicy: true - IgnorePublicAcls: true - RestrictPublicBuckets: true - - AGCloudRayExecutionRole: - Type: 'AWS::IAM::Role' - Properties: - RoleName: !Sub '${AWS::StackName}-execution-role' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: ec2.amazonaws.com - AWS: !Sub 'arn:aws:iam::${AWS::AccountId}:root' - Action: 'sts:AssumeRole' - Policies: - - PolicyName: !Sub '${AWS::StackName}-custom-policy' - PolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: 'ec2:RunInstances' - Resource: - - 'arn:aws:ec2:*::image/ami-*' - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:instance/*' - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:network-interface/*' - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:subnet/*' - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:key-pair/*' - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:volume/*' - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:security-group/*' - - - Effect: Allow - Action: - - ec2:TerminateInstances - - ec2:DeleteTags - - ec2:StartInstances - - ec2:CreateTags - - ec2:StopInstances - Resource: - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:instance/*' - - - Effect: Allow - Action: - - ec2:Describe* - - ec2:AuthorizeSecurityGroupIngress - Resource: '*' - - - Effect: Allow - Action: - - ec2:CreateSecurityGroup - Resource: - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:security-group/*' - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:vpc/*' - - - Effect: Allow - Action: - - ec2:CreateKeyPair - - ec2:DeleteKeyPair - Resource: - - !Sub 'arn:aws:ec2:*:${AWS::AccountId}:key-pair/ag_ray_cluster*' - - - Effect: Allow - Action: - - iam:GetInstanceProfile - - iam:CreateInstanceProfile - - iam:CreateRole - - iam:GetRole - - iam:AttachRolePolicy - - iam:DetachRolePolicy - - iam:AddRoleToInstanceProfile - - iam:PassRole - Resource: '*' - - - Effect: Allow - Action: - - iam:CreatePolicy - - iam:DeletePolicy - Resource: - - !Sub 'arn:aws:iam::${AWS::AccountId}:policy/AGRayClusterPolicy*' - - - Effect: Allow - Action: - - s3:PutObject - - s3:PutObjectAcl - - s3:GetObject - - s3:GetObjectAcl - - s3:AbortMultipartUpload - Resource: - - !Sub 'arn:aws:s3:::${AGCloudRayBucket}/*' - - !Sub 'arn:aws:s3:::${AGCloudRayBucket}' - - 'arn:aws:s3:::*SageMaker*' - - 'arn:aws:s3:::*Sagemaker*' - - 'arn:aws:s3:::*sagemaker*' - - - Effect: Allow - Action: 's3:ListBucket' - Resource: '*' - - - Effect: Allow - Action: - - iam:ListPolicies - - iam:ListEntitiesForPolicy - - iam:ListPolicyVersions - Resource: '*' - -Outputs: - BucketName: - Description: S3 bucket where AutoGluon-Cloud will store data for Ray - Value: !Ref AGCloudRayBucket - - RoleARN: - Description: ARN of the created IAM role for AutoGluon-Cloud with Ray - Value: !GetAtt AGCloudRayExecutionRole.Arn diff --git a/cloudformation/ag_cloud_sagemaker.yaml b/cloudformation/ag_cloud_sagemaker.yaml deleted file mode 100644 index cfbad129..00000000 --- a/cloudformation/ag_cloud_sagemaker.yaml +++ /dev/null @@ -1,58 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Description: 'CloudFormation template for AutoGluon-Cloud to run on SageMaker' - -Resources: - AGCloudSageMakerBucket: - Type: 'AWS::S3::Bucket' - Properties: - BucketName: !Sub - - '${AWS::StackName}-bucket-${suffix}' - - suffix: !Select [0, !Split ['-', !Select [2, !Split ['/', !Ref 'AWS::StackId']]]] - VersioningConfiguration: - Status: Enabled - PublicAccessBlockConfiguration: - BlockPublicAcls: true - BlockPublicPolicy: true - IgnorePublicAcls: true - RestrictPublicBuckets: true - - AGCloudSageMakerExecutionRole: - Type: 'AWS::IAM::Role' - Properties: - RoleName: !Sub '${AWS::StackName}-execution-role' - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: '' - Effect: Allow - Principal: - Service: sagemaker.amazonaws.com - AWS: !Sub 'arn:aws:iam::${AWS::AccountId}:root' - Action: 'sts:AssumeRole' - ManagedPolicyArns: - - 'arn:aws:iam::aws:policy/AmazonSageMakerFullAccess' - Policies: - - PolicyName: !Sub '${AWS::StackName}-custom-policy' - PolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: S3Access - Effect: Allow - Action: - - s3:GetBucketLocation - - s3:ListBucket - - s3:GetObject - - s3:PutObject - - s3:AbortMultipartUpload - Resource: - - !Sub 'arn:aws:s3:::${AGCloudSageMakerBucket}' - - !Sub 'arn:aws:s3:::${AGCloudSageMakerBucket}/*' - -Outputs: - BucketName: - Description: S3 bucket where AutoGluon-Cloud will save trained predictors - Value: !Ref AGCloudSageMakerBucket - - RoleARN: - Description: ARN of the created IAM role for AutoGluon-Cloud to run on SageMaker - Value: !GetAtt AGCloudSageMakerExecutionRole.Arn diff --git a/docs/ReleaseInstructions.md b/docs/ReleaseInstructions.md index dbf80c21..14be7b1e 100644 --- a/docs/ReleaseInstructions.md +++ b/docs/ReleaseInstructions.md @@ -1,85 +1,61 @@ # Release process -## Prior to release: 1 week out - -* Check all dependency version ranges. - * Ensure all dependencies are not capped by major version, unless the reason is documented inline. - * ❎ Avoid - major version cap: `scikit-learn<2` - * Ensure all dependencies have an upper cap, unless the reason is documented inline. - * ❎ Avoid - no upper cap: `scikit-learn>=1.0` - * Ensure no dependency is pinned to an exact version unless the reason is documented inline. - * ❎ Avoid - `scikit-learn==1.1.3`. This is very fragile and overly strict. - * Ensure all dependencies are capped by minor version and not micro version unless the reason is documented inline. - * Minor version capping would be `=1.0,<1.2` - * Ensure all upper caps are using `<` and not `<=`. -* Try upgrading all dependency version range upper caps to include the latest stable release. - * Note: For micro releases, this is optional. - * If increasing the range causes an error, either: - 1. Fix the error. - 2. Avoid the range change and add an inline comment in setup.py that an error occurred and why we didn't fix. - * If increasing the range causes a warning, either: - 1. Fix the warning. - 2. Suppress the warning for the user + provide justification and appropriate TODOs. - 3. Avoid the range change and add an inline comment in setup.py that a warning occurred and why we didn't fix. - * Ensure CI passes. - * Note: To truly catch potential errors, you will need to use the latest supported Python version, since some packages may only support the newer Python version in their latest releases. -* Make final call for which in-progress PRs are release critical. -* Communicate with in-progress PR owners that code freeze is in effect, no PRs will be merged that are not release critical. -* Wait 1 day after code-freeze for pre-release to be published. -* Ensure latest pre-release is working via `pip install --pre autogluon.cloud` and testing to get an idea of how the actual release will function (Ideally with fresh venv). DO NOT RELEASE if the pre-release does not work. -* Ensure pip install instructions are working correctly -* If minor fixes are needed, create PRs and merge them as necessary if they are low risk. Ensure fixes are tested manually. -* If major fixes are needed, consider the severity and if they are release critical. If they are, consider delaying release to ensure the issue is fixed (and tested). - -## Prior to release: 1 day out - -* Ensure that the mainline code you are planning to release is stable: ensure CI passes, check with team, etc. -* Sanity check with the pre-release version - * Check basic functionality for each CloudPredictor -* Cut a release branch with format `0.x.y` (no v) - this branch is required to publish docs to versioned path - * Clone from master branch - * Add 1 commit to the release branch to remove pre-release warnings and update install instructions to remove `--pre`: [Old diff](https://github.com/autogluon/autogluon-cloud/commit/8e0de4fd0f467bf971469c5f9ae8eb4534f9aa17) - * Push release branch - * Build the release branch docs and verify it's available at `https://auto.gluon.ai/cloud/0.x.y/index.html` -* Prepare the release notes located in `docs/whats_new/v0.x.y.md`: - * This will be copy-pasted into GitHub when you release. - * Include all merged PRs into the notes and mention all PR authors / contributors (refer to past releases for examples). - * Prioritize major features before minor features when ordering, otherwise order by merge date. - * Review with at least 2 core maintainers to ensure release notes are correct. - -## Release - -* Update the `stable` documentation to the new release: - * Delete the `stable` branch. - * Create new `stable` branch from `0.x.y` branch (They should be identical). - * Add and push any change in `docs/README.md` (i.e. space) to ensure `stable` branch is different from `0.x.y`. - * This is required for GH Action to execute CI continuous integration step if `0.x.y` and `stable` hashes are matching. - * Wait for CI build of the `stable` branch to pass - * Check that website has updated to align with the release docs. -* Perform version release by going to https://github.com/autogluon/autogluon-cloud/releases and click 'Draft a new release' in top right. - * Tag release with format `v0.x.y` - * Name the release identically to the tag (ex: `v0.x.y`) - * Select `master` branch as a target - * Note: we generally use master unless there are certain commits there we don't want to add to the release - * DO NOT use the 'Save draft' option during the creation of the release. This breaks GitHub pipelines. - * Copy-paste the content of `docs/whats_new/v0.x.y.md` into the release notes box. - * Ensure release notes look correct and make any final formatting fixes. - * Click 'Publish release' and the release will go live. -* Wait ~10 minutes and then locally test that the PyPi package is available and working with the latest release version, ask team members to also independently verify. - -## Post Release - -* IF THERE IS A MAJOR ISSUE: Do an emergency hot-fix and a new release ASAP. Releases cannot be deleted, so a new release will have to be done. - -After release is published, on the mainline branch: -* Update `release` in `docs/conf.py` -* Increment version in the `setup.py` file -* Update `README.md` sample code with new release version. -* Add new version links to `docs/versions.rst` -* Send release update to internal and external slack channels and mailing lists -* Publish any blogs / talks planned for release to generate interest. +## Pre-release + +* Ensure `master` is stable: CI is green, no in-flight critical PRs. +* Confirm `setup.py` has the intended release version (e.g. `version = "0.5.0"`). +* Sanity-check dependency version ranges in `setup.py`: + * No major-version caps without an inline comment justifying it. + * Every dependency has both a lower bound and an upper cap (using `<`, not `<=`). + * Caps are at the minor level (`