GuilhermeStracini / apiclient-boilerplate-rs

:bulb: :building_construction: A boilerplate API client template for Rust API clients wrappers
https://guilhermestracini.github.io/apiclient-boilerplate-rs/
MIT License
1 stars 1 forks source link

Update appveyor.yml #39

Closed guibranco closed 2 months ago

guibranco commented 2 months ago

If a newer build is queued for the same PR, cancel this one. The AppVeyor 'rollout builds' option is supposed to serve the same purpose, but it is problematic because it tends to cancel builds pushed directly to main/master instead of just PR builds (or the converse).

Credits: JuliaLang developers.

Description by Korbit AI

[!NOTE] This feature is in early access. You can enable or disable it in the Korbit Console.

What change is being made?

Add a script to appveyor.yml to cancel older builds if a newer build is queued for the same pull request.

Why are these changes being made?

This change ensures that only the latest build for a pull request is processed, reducing unnecessary resource usage and build times. The AppVeyor 'rollout builds' option was found to be unreliable, prompting this custom solution inspired by the JuliaLang developers.

Summary by CodeRabbit

semanticdiff-com[bot] commented 2 months ago

Review changes with SemanticDiff.

korbit-ai[bot] commented 2 months ago

My review is in progress :book: - I will have feedback for you in a few minutes!

senior-dev-bot[bot] commented 2 months ago

Hi there! :wave: Thanks for opening a PR. It looks like you've already reached the 5 review limit on our Basic Plan for the week. If you still want a review, feel free to upgrade your subscription in the Web App and then reopen the PR

codara-ai-code-review[bot] commented 2 months ago

Potential issues, bugs, and flaws that can introduce unwanted behavior:

  1. appveyor.yml:
    • The added PowerShell script to cancel a build if there are newer builds queued for the same pull request is complex and may be error-prone.
    • Directly referencing the AppVeyor API to check for newer builds lacks reliability as it tightly couples the build process with AppVeyor's internal mechanisms.

Code suggestions and improvements for better exception handling, logic, standardization, and consistency:

  1. appveyor.yml:
    • Instead of directly calling the AppVeyor API in the build configuration, consider using AppVeyor's native features like build policies or webhooks for more reliable build cancellation.
    • If checking for newer builds is crucial, consider implementing this logic in a more robust and maintainable way, possibly using custom scripts or external services to trigger build cancellations.
pr-code-reviewer[bot] commented 2 months ago

:wave: Hi there!

Everything looks good!

Automatically generated with the help of gpt-3.5-turbo. Feedback? Please don't hesitate to drop me an email at webber@takken.io.

coderabbitai[bot] commented 2 months ago

Walkthrough

The recent changes to the appveyor.yml configuration introduce a PowerShell script that checks for newer builds queued for the same pull request. This enhancement prevents conflicts by terminating the current build if a more recent one is pending. This approach addresses issues with the handling of queued builds in AppVeyor, ensuring that only the latest build is processed efficiently.

Changes

Files Change Summary
appveyor.yml Added a PowerShell script in the install section to check for newer builds for the same pull request, terminating the current build if necessary.

Poem

In the land of code where builds reside,
A rabbit hops with joy and pride. 🐇
No more conflicts, just a single flow,
The latest build is the star of the show!
With each new change, we leap and cheer,
For smooth deployments are finally here! ✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (invoked as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
instapr[bot] commented 2 months ago

Feedback:

The added logic to cancel the build if a newer one is queued for the same PR seems robust and well-implemented. Nice work! 👍

Just one suggestion: consider adding a comment explaining the purpose of the throw statement for more clarity.

# If a newer build is queued for the same PR, cancel this one.
# The AppVeyor 'rollout builds' option is supposed to serve the same
# purpose, but it is problematic because it tends to cancel builds pushed
# directly to main/master instead of just PR builds (or the converse).
# Credits: JuliaLang developers.

install:
  - ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
          https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
          Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
            throw "There are newer queued builds for this pull request, failing early." }
gooroo-dev[bot] commented 2 months ago

Please double-check what I found in the pull request:

🐞Mistake 🤪Typo 🚨Security 🚀Performance 💪Best Practices 📖Readability ❓Others
0 0 0 0 1 1 0

Summary of Proposed Changes

Identified Issues

ID Type Details Severity Confidence
1 💪Best Practices Hardcoded URL in the script. File: appveyor.yml, Lines: 18-19 🟠Medium 🟠Medium
2 📖Readability Long lines of code that reduce readability. File: appveyor.yml, Lines: 18-19 🟡Low 🟡Low

Issue 1: Hardcoded URL in the script

Details: The URL https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50 is hardcoded in the script. This can be problematic if the URL changes or if the script is used in different environments.

Code:

- ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
        https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
        Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
          throw "There are newer queued builds for this pull request, failing early." }

Fix:

- ps: $url = "https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50"
  if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
        $url).builds | `
        Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
          throw "There are newer queued builds for this pull request, failing early." }

Explanation: Assign the URL to a variable to make it easier to change if needed.

Issue 2: Long lines of code that reduce readability

Details: The lines of code are very long, which can reduce readability and make it harder to maintain. File: appveyor.yml, Lines: 18-19.

Code:

- ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
        https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
        Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
          throw "There are newer queued builds for this pull request, failing early." }

Fix:

- ps: $url = "https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50"
  $response = Invoke-RestMethod $url
  $builds = $response.builds
  $prBuild = $builds | Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER
  if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne $prBuild[0].buildNumber) {
      throw "There are newer queued builds for this pull request, failing early."
  }

Explanation: Break down the long lines into smaller, more manageable lines to improve readability.

General Review

The proposed changes add a useful feature to cancel older builds for the same pull request if a newer build is queued. The comments explaining the purpose of the new feature improve readability. However, the hardcoded URL and long lines of code reduce maintainability and readability. These issues should be addressed to improve the overall quality of the code.

Summon me to re-review when updated! Yours, Gooroo.dev I'd love to hear your feedback! Add a reaction or reply.

github-actions[bot] commented 2 months ago

Infisical secrets check: :white_check_mark: No secrets leaked!

Scan results:

11:03AM INF scanning for exposed secrets...
11:03AM INF 71 commits scanned.
11:03AM INF scan completed in 67.1ms
11:03AM INF no leaks found