Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: change s3 cache provider to optimize costs #2344

Merged
merged 53 commits into from
Nov 26, 2024
Merged

ci: change s3 cache provider to optimize costs #2344

merged 53 commits into from
Nov 26, 2024

Conversation

lklimek
Copy link
Contributor

@lklimek lklimek commented Nov 21, 2024

Issue being fixed or feature implemented

We use Amazon S3 as a cache backend. With very big cache sizes (just cache layers have multiple GBs of size), it became very expensive. We need to find a way to avoid this cost.

What was done?

  1. Created new aws_credentials action that creates AWS credentials file, to be used as secret mount during Docker build
  2. Modified docker action inputs - prefixed existing with cache_, added cache_region,cache_endpoint
  3. Docker build now uses secret mounts to manage secrets
  4. Removed bucket from librocksdb action
  5. Added endpoint to s3-layer-cache-settings action
  6. Added sccache action that configures sccache (incl. environment variables)
  7. Replaces secrets.AWS_REGION with vars.AWS_REGION

How Has This Been Tested?

Run GHA pipelines multiple times and observe the results.

Breaking Changes

None from external user perspective, CI/CD config is not publicly useable.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed

For repository code-owners and collaborators only

  • I have assigned this pull request to a milestone

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Introduced a new GitHub Action for managing AWS credentials, improving security and accessibility during builds.
    • Added a new action for configuring sccache caching, enhancing build performance for Rust projects.
    • Enhanced Docker image build workflows with new caching parameters and improved management of AWS credentials.
    • Updated workflows to utilize new caching mechanisms and environment variables, streamlining build processes.
    • Added optional input parameters for S3 caching configuration in multiple actions.
    • Introduced a new action for logging into AWS ECR, facilitating Docker container management.
    • Enhanced the tests workflows with new input parameters to control test execution.
  • Bug Fixes

    • Updated AWS region handling across multiple workflows to ensure consistency and reliability.
  • Documentation

    • Improved comments and descriptions in workflow files for better clarity and understanding.
  • Chores

    • Removed outdated steps related to AWS credential configuration in various workflows, streamlining the release process.

Copy link
Contributor

coderabbitai bot commented Nov 21, 2024

Walkthrough

This pull request introduces several changes across multiple GitHub Actions workflows and configurations, primarily focusing on managing AWS credentials and enhancing caching mechanisms. A new action for AWS credentials management is added, along with modifications to existing workflows to utilize new caching parameters. The changes also include the introduction of sccache for caching Rust builds, updates to input parameters, and the removal of deprecated AWS credential configurations in various workflows. Overall, the modifications streamline the configuration and improve the handling of AWS credentials and caching strategies.

Changes

File Path Change Summary
.github/actions/aws_credentials/action.yaml New action added for managing AWS credentials with inputs: access_key_id, secret_access_key, and optional profile.
.github/actions/docker/action.yaml Input parameters modified for caching: bucketcache_bucket, regioncache_region, new parameters added: cache_endpoint, cache_access_key_id, cache_secret_access_key.
.github/actions/librocksdb/action.yaml Removed input parameter bucket, preserving other inputs and workflow structure.
.github/actions/rust/action.yaml Updated output handling for Rust toolchain version, added conditional logic for protoc installation, and retained caching logic.
.github/actions/s3-layer-cache-settings/action.yaml Changed action name quotes, updated input descriptions to double quotes, and added optional input endpoint.
.github/actions/sccache/action.yaml New action introduced for sccache configuration with required inputs for S3 caching and multiple steps for installation and configuration.
.github/workflows/release-docker-image.yml Removed AWS credentials configuration step, introduced new environment variables for caching.
.github/workflows/release.yml Modified release-npm job to remove AWS credentials configuration and added sccache setup step.
.github/workflows/tests-build-image.yml Updated AWS region handling, introduced new caching variables, and removed old AWS credentials parameters.
.github/workflows/tests-build-js.yml Commented out AWS credentials configuration, added sccache setup step, and removed related environment variables.
.github/workflows/tests-codeql.yml Updated AWS region input to use vars.AWS_REGION instead of secrets.AWS_REGION.
.github/workflows/tests-dashmate.yml Changed AWS region handling to use vars.AWS_REGION, updated Docker login command, and improved conditional logic for test execution.
.github/workflows/tests-js-package.yml Updated AWS region handling, added conditional check for skipping tests, and revised comments regarding AWS credentials.
.github/workflows/tests-packges-functional.yml Updated AWS region handling in multiple places to use vars.AWS_REGION.
.github/workflows/tests-rs-package.yml Removed AWS credentials configuration, added sccache setup step, and updated environment variable usage.
.github/workflows/tests-test-suite.yml Updated AWS region handling and corrected indentation for environment variables.
.github/workflows/tests.yml Added sccache setup step in rs-crates-security job with parameters for S3 configuration.
Dockerfile Introduced new build arguments for sccache configuration, removed RUSTC_WRAPPER, and improved error handling.
packages/rs-dpp/src/lib.rs Modified comment style for coding conventions without functional changes.
.github/actions/aws_ecr_login/action.yaml New action added for logging into AWS ECR, with required inputs for AWS account and credentials.

Possibly related PRs

  • ci: use prebuilt librocksdb in github actions #2316: This PR introduces a new GitHub Actions workflow for building and caching librocksdb, which is relevant to the main PR's focus on managing AWS credentials and caching mechanisms.
  • ci: prebuilt librocksdb in docker image #2318: This PR implements a prebuilt version of the librocksdb library within a Docker image, which relates to the main PR's changes in AWS credential management and caching strategies.
  • ci: improve caching #2329: This PR enhances the caching mechanism in the CI process, which aligns with the main PR's updates to AWS credentials and caching configurations in GitHub Actions.

Suggested reviewers

  • QuantumExplorer

Poem

🐰 In the land of code where bunnies play,
We’ve tidied up our workflows today!
With credentials safe and caches bright,
Our builds will run with all their might!
So hop along, let’s celebrate,
For smoother paths we now create! 🌟

Warning

Rate limit exceeded

@lklimek has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 10 minutes and 35 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 5fbe581 and b910256.


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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • 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 gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @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 using 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.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

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 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 for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
.github/actions/docker/action.yaml (1)

189-198: Consider additional security measures for AWS credentials.

While the secret mount and AWS profile isolation are good practices, consider:

  1. Adding a check to ensure the AWS profile exists in the credentials file
  2. Validating the S3 bucket access before the build starts

Add this validation before the Docker build step:

    - name: Unset AWS credentials to avoid conflicts
      shell: bash
      run: |
        if [ ! -f "$HOME/.aws/credentials" ]; then
          echo "Error: AWS credentials file not found"
          exit 1
        fi
+       if ! grep -q "\[sccache\]" "$HOME/.aws/credentials"; then
+         echo "Error: sccache profile not found in AWS credentials"
+         exit 1
+       fi
+       # Validate S3 bucket access
+       AWS_PROFILE=sccache aws s3 ls "s3://${{ inputs.cache_bucket }}" >/dev/null 2>&1 || {
+         echo "Error: Cannot access S3 bucket"
+         exit 1
+       }
        echo AWS_DEFAULT_REGION='' >> $GITHUB_ENV
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 5f3eb51 and 2fa40cd.

📒 Files selected for processing (1)
  • .github/actions/docker/action.yaml (5 hunks)
🔇 Additional comments (4)
.github/actions/docker/action.yaml (4)

28-45: LGTM! Well-structured input parameters for S3 caching.

The new cache-related input parameters are well-organized with:

  • Consistent cache_ prefix naming convention
  • Appropriate required flags for essential parameters
  • Clear and informative descriptions

86-88: LGTM! Layer cache configuration properly updated.

The configuration correctly uses the new cache parameters and includes the S3 endpoint parameter.


165-177: LGTM! Proper AWS credentials handling implemented.

The implementation includes:

  • Appropriate error handling for missing credentials file
  • Clear cleanup of AWS environment variables
  • Well-documented purpose in the comment

155-164: Verify sccache installation and configuration.

The sccache setup looks correct, but let's verify the installation process.

✅ Verification successful

Sccache setup is correctly configured

The setup is verified and working as intended:

  • Sccache installation is handled by mozilla-actions/sccache-action when install: true
  • Setting install: false in the Docker action is correct because:
    • The Docker action only needs the environment variables
    • The actual sccache binary is installed inside the Docker container using the version passed via SCCACHE_VERSION
  • All required S3 configuration (bucket, region, endpoint) and AWS credentials are properly set up
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify sccache action exists and check its configuration
# Check if sccache action exists
if [ ! -f ".github/actions/sccache/action.yaml" ]; then
  echo "Error: sccache action not found"
  exit 1
fi

# Check sccache action configuration
cat .github/actions/sccache/action.yaml | grep -A 5 "install:"

Length of output: 248


Script:

#!/bin/bash
# Let's check the complete sccache action implementation to understand the installation logic
cat .github/actions/sccache/action.yaml

# Also check if sccache is installed elsewhere in the docker action
rg "sccache" .github/actions/docker/action.yaml

Length of output: 2197

.github/actions/docker/action.yaml Show resolved Hide resolved
.github/actions/docker/action.yaml Outdated Show resolved Hide resolved
.github/workflows/release-docker-image.yml Show resolved Hide resolved
.github/workflows/release.yml Outdated Show resolved Hide resolved
.github/workflows/tests-build-js.yml Outdated Show resolved Hide resolved
.github/workflows/tests-codeql.yml Outdated Show resolved Hide resolved
.github/workflows/tests-js-package.yml Outdated Show resolved Hide resolved
.github/workflows/tests-js-package.yml Outdated Show resolved Hide resolved
.github/workflows/tests.yml Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (5)
.github/actions/aws_ecr_login/action.yaml (3)

5-18: Enhance input security and validation

Consider the following improvements for the input parameters:

  1. Mark sensitive inputs as secrets
  2. Add input validation for AWS account ID
  3. Consider providing a default region

Apply this diff:

 inputs:
   aws_account_id:
     description: AWS account ID (AWS_ACCOUNT_ID)
     required: true
+    pattern: '^\d{12}$'
   aws_access_key_id:
     description: Access key ID (AWS_ACCESS_KEY_ID)
     required: true
+    secret: true
   aws_secret_access_key:
     description: Secret access key (AWS_SECRET_ACCESS_KEY)
     required: true
+    secret: true
   aws_region:
     description: AWS region to use (AWS_REGION)
     required: true
+    default: 'us-east-1'

22-28: LGTM! Consider clarifying the step name

The AWS credentials configuration is correctly implemented with proper version pinning.

Consider renaming the step to be more specific:

-    - name: Configure AWS credentials and bucket region
+    - name: Configure AWS credentials for ECR access

29-33: Add error handling and improve command readability

While the ECR login implementation is correct, it could be more robust and readable.

Consider this improved implementation:

     - name: Login to ECR
+      id: ecr_login
       run: |
+        set -euo pipefail
+        ECR_REGISTRY="${{ inputs.aws_account_id }}.dkr.ecr.${{ inputs.aws_region }}.amazonaws.com"
+        echo "Logging into ECR registry: $ECR_REGISTRY"
         aws ecr get-login-password \
-          --region ${{ inputs.aws_region }} | docker login --username AWS --password-stdin ${{ inputs.aws_account_id }}.dkr.ecr.${{ inputs.aws_region  }}.amazonaws.com
+          --region ${{ inputs.aws_region }} | docker login --username AWS --password-stdin "$ECR_REGISTRY" \
+          || { echo "::error::Failed to login to ECR"; exit 1; }
+        echo "::notice::Successfully logged into ECR"
       shell: bash
.github/workflows/tests-dashmate.yml (2)

34-40: Add pre-flight checks for AWS credentials

While the AWS credentials are properly handled as secrets, consider adding pre-flight checks to ensure all required credentials are present before attempting ECR login.

Add this step before the ECR login:

      - name: Validate AWS credentials
        run: |
          if [ -z "${{ secrets.AWS_ACCESS_KEY_ID }}" ] || [ -z "${{ secrets.AWS_SECRET_ACCESS_KEY }}" ] || [ -z "${{ vars.AWS_REGION }}" ] || [ -z "${{ secrets.AWS_ACCOUNT_ID }}" ]; then
            echo "Error: Required AWS credentials are missing"
            exit 1
          fi

Line range hint 89-108: Optimize test execution environment configuration

The current implementation duplicates test execution steps with slightly different environments. Consider consolidating the environment variables and test execution logic.

      - name: Configure test environment
        id: test-config
        run: |
          echo "DASHMATE_E2E_TESTS_SKIP_IMAGE_BUILD=true" >> $GITHUB_ENV
          if [ "${{ steps.local-network-data.outputs.cache-hit }}" == "true" ]; then
            echo "DASHMATE_E2E_TESTS_LOCAL_HOMEDIR=${{ env.HOME }}/.dashmate" >> $GITHUB_ENV
          fi
          echo "DEBUG=1" >> $GITHUB_ENV

      - name: Run tests
        run: yarn workspace dashmate run mocha ${{ inputs.test-pattern }}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 2fa40cd and 9a0a8ce.

📒 Files selected for processing (10)
  • .github/actions/aws_ecr_login/action.yaml (1 hunks)
  • .github/actions/docker/action.yaml (5 hunks)
  • .github/workflows/release.yml (2 hunks)
  • .github/workflows/tests-build-image.yml (1 hunks)
  • .github/workflows/tests-build-js.yml (1 hunks)
  • .github/workflows/tests-codeql.yml (0 hunks)
  • .github/workflows/tests-dashmate.yml (2 hunks)
  • .github/workflows/tests-js-package.yml (0 hunks)
  • .github/workflows/tests-packges-functional.yml (2 hunks)
  • .github/workflows/tests-test-suite.yml (3 hunks)
💤 Files with no reviewable changes (2)
  • .github/workflows/tests-codeql.yml
  • .github/workflows/tests-js-package.yml
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/actions/docker/action.yaml
  • .github/workflows/tests-test-suite.yml
🔇 Additional comments (13)
.github/workflows/tests-packges-functional.yml (3)

10-10: LGTM! Good practice using vars for non-sensitive AWS region.

The change from secrets.AWS_REGION to vars.AWS_REGION is appropriate as the AWS region is not sensitive information. The ECR host URL format is correct and maintains security by keeping the AWS account ID in secrets.


24-29: Verify the security of AWS credentials handling in custom action.

While the migration to a custom ECR login action is reasonable, please ensure:

  1. The custom action properly handles AWS credentials securely
  2. Credentials are not logged or exposed in action outputs
  3. The action includes appropriate error handling for failed logins

Let's verify the implementation of the custom action:

✅ Verification successful

AWS credentials are handled securely in the custom action

The implementation is secure and follows best practices:

  • Uses official aws-actions/configure-aws-credentials@v4 action for credential management
  • Credentials are passed securely through environment variables
  • ECR login password is piped directly to docker login without being stored
  • Credentials are properly cleaned up by unsetting environment variables after use
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check the custom action implementation
cat .github/actions/aws_ecr_login/action.yml

# Look for potential credential exposure in error messages or debug statements
rg -i "secret|credentials|password" .github/actions/aws_ecr_login/

Length of output: 1292


Script:

#!/bin/bash
# Let's check the actual content of the action.yaml file
cat .github/actions/aws_ecr_login/action.yaml

# Also check if there are any other files in the action directory
ls -la .github/actions/aws_ecr_login/

Length of output: 1716


Line range hint 31-35: Verify impact on test reliability and costs.

The changes to AWS authentication could affect:

  1. Test reliability if ECR login fails
  2. CI/CD costs (main PR objective)
  3. Local network setup using ECR images

Please ensure that:

  1. Failed ECR logins don't silently fail
  2. The local network setup properly handles ECR authentication
  3. Cost optimization goals are achieved without compromising test reliability

Let's check for error handling in the local network setup:

✅ Verification successful

Let me gather more information about the local network setup and error handling:


Let me check the setup and configuration scripts to understand the complete flow:


Docker image handling and test setup are properly safeguarded

After reviewing the implementation, I can confirm that:

  1. The setup has proper error handling with set -e in all scripts, ensuring failures are not silent
  2. Docker image configuration has explicit error handling through bash execution flags
  3. The local network setup includes proper validation of environment variables and explicit error checks
  4. The caching mechanism for network data optimizes costs without compromising reliability

Key safeguards:

  • Setup script exits on failure with explicit error code
  • Environment variable validation prevents silent failures
  • Docker image configuration verifies tags and performs explicit pulls
  • Proper error propagation through the entire workflow
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check local network action implementation
cat .github/actions/local-network/action.yml

# Look for error handling patterns
rg -A 3 "if|try|catch|error" .github/actions/local-network/

Length of output: 1747


Script:

#!/bin/bash
# Check the full local network action implementation
cat .github/actions/local-network/action.yaml

# Check the setup script content
rg -A 5 "Setup local network" -g "!*.md"

# Look for docker-related error handling
rg -A 3 "docker|ECR" .github/actions/local-network/

Length of output: 4015


Script:

#!/bin/bash
# Check setup and configuration scripts
cat scripts/setup_local_network.sh
cat scripts/configure_test_suite.sh
cat scripts/configure_dotenv.sh

# Look for error handling in these scripts
rg -A 3 "set -|exit|error|fail" scripts/setup_local_network.sh scripts/configure_test_suite.sh scripts/configure_dotenv.sh

Length of output: 7101

.github/actions/aws_ecr_login/action.yaml (2)

1-42: Verify secure usage in workflows

Let's ensure this action is used securely across workflows and that credentials are properly handled.

✅ Verification successful

AWS ECR login action is securely implemented and used

The verification shows that the action is used properly across multiple workflows:

  • All sensitive credentials are properly stored as GitHub secrets
  • AWS credentials are consistently passed using secrets context (${{ secrets.AWS_*}})
  • Region is stored as a variable (${{ vars.AWS_REGION }})
  • The action is used in test and build workflows with consistent security patterns
  • The credential cleanup step in the action properly unsets AWS environment variables
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for secure usage of aws_ecr_login action
# Look for workflows using this action
echo "Checking workflows using aws_ecr_login:"
rg -l "uses: .*actions/aws_ecr_login@" .github/workflows/

# Check for potential credential leakage in debug steps
echo -e "\nChecking for potential credential exposure in debug steps:"
rg -B2 -A2 "run: .*aws" .github/workflows/ | rg -i "debug|print|echo|log"

Length of output: 357


Script:

#!/bin/bash
# Let's try a broader search to find any workflow files that might be using this action
echo "Checking for any references to aws_ecr_login:"
rg -l "aws_ecr_login" .github/workflows/

# Check for any ECR-related commands in workflows
echo -e "\nChecking for ECR-related commands:"
rg "ecr" .github/workflows/

# Check for potential AWS credential handling in workflows
echo -e "\nChecking AWS credential handling:"
rg -B2 -A2 "AWS_.*_KEY|aws-.*-key" .github/workflows/

Length of output: 10261


35-42: Verify credentials cleanup

The cleanup step is important for security. Consider adding verification to ensure the credentials are properly unset.

Add verification and improve the cleanup:

     - name: Unset AWS credentials to avoid conflicts
       shell: bash
       run: |
         echo AWS_DEFAULT_REGION='' >> $GITHUB_ENV
         echo AWS_REGION='' >> $GITHUB_ENV
         echo AWS_ACCESS_KEY_ID='' >> $GITHUB_ENV
         echo AWS_SECRET_ACCESS_KEY='' >> $GITHUB_ENV
+        # Verify cleanup in the next step's environment
+        echo 'if [[ -n "${AWS_ACCESS_KEY_ID:-}" ]] || [[ -n "${AWS_SECRET_ACCESS_KEY:-}" ]]; then
+          echo "::error::AWS credentials were not properly unset"
+          exit 1
+        fi' >> "$GITHUB_WORKSPACE/.verify_cleanup.sh"
+    
+    - name: Verify credentials cleanup
+      shell: bash
+      run: bash "$GITHUB_WORKSPACE/.verify_cleanup.sh"

Let's verify the cleanup script works:

.github/workflows/tests-build-image.yml (3)

39-39: LGTM: Region reference updated correctly

The change from secrets.AWS_REGION to vars.AWS_REGION in the image_org is appropriate as the region is not sensitive information.


28-33: Verify the aws_ecr_login action implementation

The change to use a local ECR login action looks good, with proper secrets handling. However, let's verify the referenced action exists and handles credentials securely.

✅ Verification successful

ECR login action implementation is secure and follows best practices

The local action .github/actions/aws_ecr_login exists (with .yaml extension) and implements proper security measures:

  • Uses official aws-actions/configure-aws-credentials@v4 for AWS credential handling
  • Properly passes through credentials via inputs without exposing them
  • Includes cleanup step to unset credentials after use
  • Uses standard AWS CLI commands for ECR login
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if the ECR login action exists and verify its implementation
if [ -f ".github/actions/aws_ecr_login/action.yml" ]; then
    echo "Action exists. Checking implementation..."
    cat .github/actions/aws_ecr_login/action.yml
else
    echo "Warning: aws_ecr_login action not found!"
fi

# Look for any potential credential leaks in the action
rg -g "!.git" "AWS_SECRET_ACCESS_KEY|AWS_ACCESS_KEY_ID" .github/actions/aws_ecr_login/

Length of output: 613


Script:

#!/bin/bash
# Check if the action exists with .yaml extension (since we found matches there)
if [ -f ".github/actions/aws_ecr_login/action.yaml" ]; then
    echo "Action exists with .yaml extension. Checking implementation..."
    cat .github/actions/aws_ecr_login/action.yaml
else
    echo "Warning: aws_ecr_login action.yaml not found!"
fi

# Check the action's script if it exists
if [ -f ".github/actions/aws_ecr_login/login.sh" ]; then
    echo -e "\nChecking login script..."
    cat .github/actions/aws_ecr_login/login.sh
fi

Length of output: 1743


45-49: Verify cache configuration variables

The new cache configuration aligns with the PR objective to optimize costs through a custom S3 cache provider. However, let's verify that all required variables are properly defined.

The separation of cache credentials from main AWS credentials is a good architectural decision as it:

  1. Enables use of different S3-compatible storage providers
  2. Follows the principle of least privilege
  3. Allows for independent rotation of credentials
.github/workflows/tests-build-js.yml (1)

Line range hint 1-46: Verify AWS credentials availability during build

The removal of direct AWS credentials configuration aligns with the PR objectives to use secret mounts. However, we should verify that the build process still has access to required AWS resources through the new sccache configuration.

Let's check for any remaining AWS credential dependencies:

✅ Verification successful

AWS credentials properly configured through sccache

Based on the verification results, the AWS credentials removal from the workflow is properly handled. The build process now correctly uses sccache configuration with the necessary credentials (CACHE_KEY_ID and CACHE_SECRET_KEY) for S3 access, and all required build steps are properly conditioned. The workflow maintains proper access to AWS resources through the new secret configuration.

Key points verified:

  • AWS credentials are now properly provided through sccache configuration
  • All build steps have proper conditional checks
  • No direct AWS credential references remain in the build process
  • Build artifacts are properly handled with the new configuration
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify AWS credential usage in build process
# Check for any remaining AWS credential references that might be affected

# Search for AWS-related environment variables or credential references in the build step
echo "Checking for AWS references in build commands:"
rg -A 3 "AWS_|SCCACHE_" .github/workflows/tests-build-js.yml

# Check if the build process requires any other AWS access
echo "Checking for other AWS dependencies in build scripts:"
fd -e sh -e js "build" | xargs rg "aws-sdk|AWS_"

Length of output: 331


Script:

#!/bin/bash
# Let's check for any build-related files and their content to understand AWS dependencies
echo "=== Checking build-related workflow files ==="
fd workflow "\.ya?ml$" .github/workflows/ | xargs cat

echo -e "\n=== Checking for sccache configuration ==="
fd "sccache" .github/actions/ | xargs cat

echo -e "\n=== Checking package.json for build scripts ==="
cat package.json 2>/dev/null || echo "No package.json found"

echo -e "\n=== Checking any Rust build configuration ==="
fd "cargo|rust" .github/actions/ | xargs cat

Length of output: 5148


Script:

#!/bin/bash
# Let's fix the previous command and check specific files
echo "=== Checking workflow file content ==="
cat .github/workflows/tests-build-js.yml

echo -e "\n=== Checking sccache action content ==="
cat .github/actions/sccache/action.yml 2>/dev/null || echo "No action.yml found in sccache directory"

echo -e "\n=== Checking rust action content ==="
cat .github/actions/rust/action.yml 2>/dev/null || echo "No action.yml found in rust directory"

echo -e "\n=== Checking for build artifacts configuration ==="
find . -maxdepth 3 -type f -name "*.toml" -o -name "*.json" | grep -i "build" | while read -r file; do
  echo "=== Content of $file ==="
  cat "$file" 2>/dev/null
done

Length of output: 6512

.github/workflows/tests-dashmate.yml (1)

Line range hint 1-108: Verify workflow changes align with S3 cache optimization goals

The workflow changes successfully implement the intended modifications for optimizing the S3 cache provider:

  1. AWS credentials are properly handled using secrets
  2. Region configuration uses vars instead of secrets
  3. Cache restoration logic is properly implemented

However, to fully verify the impact of these changes:

✅ Verification successful

AWS region configuration is properly implemented across workflows

The verification confirms that:

  • All workflows consistently use vars.AWS_REGION instead of secrets.AWS_REGION
  • AWS credentials and region configurations are properly implemented across all workflow files
  • Cache-related environment variables in tests-dashmate.yml are correctly configured
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for any remaining references to the old AWS credentials pattern
rg -l 'secrets\.AWS_REGION' .github/workflows/

# Verify the consistency of cache-related environment variables
rg -l 'DASHMATE_E2E_TESTS_' .github/workflows/

Length of output: 132


Script:

#!/bin/bash
# Let's verify the AWS region configuration across all workflow files
rg 'AWS_REGION' .github/workflows/ -A 2 -B 2

# Check for any other AWS-related environment configurations
rg 'aws_region|AWS_REGION' .github/workflows/ --type yaml

Length of output: 4736

.github/workflows/release.yml (3)

80-80: LGTM! Environment cleanup is consistent.

The removal of SCCACHE environment variables is appropriate since they're now handled by the dedicated sccache setup step.


Line range hint 154-207: Verify shared workflow compatibility with new cache configuration.

The release jobs look good, but we should verify that the shared workflow .github/workflows/release-docker-image.yml properly supports the new cache configuration.

Let's check the shared workflow configuration:

✅ Verification successful

Cache configuration is properly integrated across the workflow chain

The shared workflow properly integrates with the new cache configuration:

  • All required cache parameters are correctly passed from the main workflow to the custom Docker action
  • The Docker action properly configures both layer caching and compiler caching (sccache)
  • Cache settings are properly configured for:
    • Docker layer caching via S3
    • Cargo/Rust compilation caching
    • Yarn package caching
    • Compiler caching (sccache)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the shared workflow compatibility with new cache configuration

# Check if the shared workflow exists and contains the necessary cache configuration
rg -A 5 'cache_(region|endpoint|bucket|access_key_id|secret_access_key)' .github/workflows/release-docker-image.yml

# Check for any remaining old AWS credential configuration that might conflict
rg -A 5 'AWS_(ACCESS_KEY_ID|SECRET_ACCESS_KEY|REGION)' .github/workflows/release-docker-image.yml

Length of output: 636


Script:

#!/bin/bash
# Let's verify the complete workflow configuration to ensure proper integration

# Check the complete shared workflow file
cat .github/workflows/release-docker-image.yml

# Also check for any buildx setup and cache configuration
rg -A 10 'docker/setup-buildx-action' .github/workflows/release-docker-image.yml

# Check for docker build command to verify cache usage
rg -A 10 'docker build|docker buildx build' .github/workflows/release-docker-image.yml

Length of output: 6017


Script:

#!/bin/bash
# Let's verify the actual Docker build configuration in the custom action

# Check the Docker build action configuration
cat .github/actions/docker/action.yml

# Also check for any cache-related environment variables or arguments
rg -A 5 'cache|type=s3' .github/actions/docker/

Length of output: 8206


54-64: LGTM! Verify sccache configuration variables.

The sccache setup looks good with proper separation of sensitive and non-sensitive data. The configuration aligns well with the PR objectives to optimize S3 cache costs.

Let's verify the required variables and secrets are properly configured:

.github/workflows/tests-build-js.yml Outdated Show resolved Hide resolved
.github/workflows/tests-dashmate.yml Outdated Show resolved Hide resolved
@lklimek lklimek requested a review from shumkov November 25, 2024 15:41
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (4)
.github/workflows/tests-packges-functional.yml (1)

24-29: Consider adding error handling for ECR login

The ECR login step should handle potential authentication failures gracefully.

Consider adding:

 - name: Login to ECR
   uses: ./.github/actions/aws_ecr_login
   with:
     aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
     aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
     aws_region: ${{ vars.AWS_REGION }}
     aws_account_id: ${{ secrets.AWS_ACCOUNT_ID }}
+  id: ecr_login
+- name: Verify ECR Login
+  if: ${{ failure() && steps.ecr_login.outcome == 'failure' }}
+  run: |
+    echo "ECR login failed. Please verify AWS credentials and permissions."
+    exit 1
.github/workflows/tests-build-js.yml (1)

Line range hint 1-93: Consider architectural improvements for better maintainability and reliability.

The workflow structure is well-organized, but consider these improvements:

  1. Consider creating a composite action for the build setup steps (Node.js, Rust, sccache) to improve reusability across workflows:
# .github/actions/js-build-setup/action.yml
name: 'JS Build Setup'
runs:
  using: "composite"
  steps:
    - uses: ./.github/actions/nodejs
    - uses: ./.github/actions/rust
      with:
        target: wasm32-unknown-unknown
    - uses: ./.github/actions/sccache
      with:
        bucket: ${{ inputs.cache_bucket }}
        region: ${{ inputs.cache_region }}
        endpoint: ${{ inputs.cache_endpoint }}
        access_key_id: ${{ inputs.cache_key_id }}
        secret_access_key: ${{ inputs.cache_secret_key }}
  1. Consider increasing the artifact retention period if these artifacts are needed by downstream workflows:
-          retention-days: 1
+          retention-days: 7
  1. The git diff approach for determining built files might miss files that were modified but not newly created. Consider using a manifest file or explicit path patterns instead.
Dockerfile (2)

49-58: Consider using more explicit deps image selection logic.

While the current string concatenation approach works, it might be less maintainable. A more explicit approach could make the logic clearer.

Consider this alternative:

-ARG DEPS_IMAGE=${SCCACHE_GHA_ENABLED}${SCCACHE_BUCKET}${SCCACHE_MEMCACHED}
-ARG DEPS_IMAGE=${DEPS_IMAGE:+sccache}
-ARG DEPS_IMAGE=deps-${DEPS_IMAGE:-base}
+# Set a default value
+ARG DEPS_IMAGE=deps-base
+# Override if any sccache backend is enabled
+ARG DEPS_IMAGE=deps-sccache

Then use a build argument in your docker build command:

--build-arg DEPS_IMAGE=deps-sccache  # when using any sccache backend
--build-arg DEPS_IMAGE=deps-base     # when not using sccache

245-259: Remove commented out sccache test code.

This section contains commented out test code for sccache configuration. If it's no longer needed, consider removing it to keep the Dockerfile clean.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 9a0a8ce and 0928f49.

📒 Files selected for processing (6)
  • .github/workflows/release-docker-image.yml (1 hunks)
  • .github/workflows/release.yml (2 hunks)
  • .github/workflows/tests-build-js.yml (1 hunks)
  • .github/workflows/tests-dashmate.yml (2 hunks)
  • .github/workflows/tests-packges-functional.yml (2 hunks)
  • Dockerfile (10 hunks)
🧰 Additional context used
📓 Learnings (1)
Dockerfile (2)
Learnt from: lklimek
PR: dashpay/platform#2344
File: Dockerfile:198-207
Timestamp: 2024-11-25T13:09:41.979Z
Learning: In the `Dockerfile`, credentials are managed by Docker secret mounts (e.g., `--mount=type=secret,id=AWS`), so there's no need to add cleanup steps to wipe credentials after use.
Learnt from: lklimek
PR: dashpay/platform#2344
File: Dockerfile:55-58
Timestamp: 2024-11-25T12:59:13.055Z
Learning: In Dockerfile multi-stage builds, variables defined within `RUN` instructions are not available in `FROM` commands in subsequent stages.
🔇 Additional comments (14)
.github/workflows/tests-packges-functional.yml (2)

10-10: Verify AWS_REGION variable configuration

The change from secrets.AWS_REGION to vars.AWS_REGION is appropriate as the region is not sensitive information. However, ensure that AWS_REGION is properly configured in the repository variables.


24-29: Verify aws_ecr_login action implementation

The ECR login has been refactored to use a custom action. Let's verify its implementation.

.github/workflows/tests-build-js.yml (1)

37-45: Verify sccache action configuration and add input validation.

The sccache setup looks good overall, but let's ensure it's properly configured:

Consider adding input validation to the sccache action to handle missing configurations gracefully. Example:

- name: Setup sccache
  id: setup_sccache
  uses: ./.github/actions/sccache
  if: |
    steps.check-artifact.outputs.exists != 'true' &&
    vars.CACHE_S3_BUCKET != '' &&
    vars.CACHE_REGION != '' &&
    vars.CACHE_S3_ENDPOINT != ''
  with:
    bucket: ${{ vars.CACHE_S3_BUCKET }}
    region: ${{ vars.CACHE_REGION }}
    endpoint: ${{ vars.CACHE_S3_ENDPOINT }}
    access_key_id: ${{ secrets.CACHE_KEY_ID }}
    secret_access_key: ${{ secrets.CACHE_SECRET_KEY }}
.github/workflows/tests-dashmate.yml (3)

53-56: Previous security concerns still apply

The direct use of AWS account ID in ECR URL construction could expose sensitive information in logs.

This issue was previously identified in an earlier review. Please refer to the existing comment for the recommended solution.


34-40: Verify the aws_ecr_login action configuration

The migration to a custom action for ECR login is a good practice. However, let's ensure the action is properly configured.


Line range hint 95-109: Review DEBUG environment variable usage

Both test execution steps set DEBUG=1, which might expose sensitive information in logs. Consider:

  1. Using more specific debug flags if available
  2. Removing debug mode from production workflows
  3. Implementing log sanitization if debug output is necessary
.github/workflows/release-docker-image.yml (1)

66-70: LGTM! Verify cache configuration variables exist

The changes align with the PR objective to optimize S3 cache costs. The separation between non-sensitive settings (vars) and sensitive credentials (secrets) follows security best practices.

Let's verify the existence of required cache configuration:

Consider adding a comment in the workflow file documenting the required cache configuration:

env:
  DIGEST_NAME: digests-${{ inputs.image_org }}-${{ inputs.image_name }}-${{ inputs.tag }}-${{ inputs.cargo_profile }}-${{ github.sha }}
  DIGEST_DIR_PATH: /tmp/digests
+ # Required cache configuration:
+ # Repository variables:
+ #   - CACHE_REGION: AWS region for S3 cache
+ #   - CACHE_S3_BUCKET: S3 bucket name for caching
+ #   - CACHE_S3_ENDPOINT: S3 endpoint URL
+ # Repository secrets:
+ #   - CACHE_KEY_ID: AWS access key ID for cache access
+ #   - CACHE_SECRET_KEY: AWS secret access key for cache access
.github/workflows/release.yml (3)

54-64: Verify sccache action configuration

The sccache setup looks good with appropriate separation of sensitive and non-sensitive configurations. However, let's verify the referenced action exists and is properly configured.


Line range hint 154-227: Verify Docker image workflow changes

The Docker image release jobs are properly configured with secrets inheritance and consistent use of vars.AWS_REGION. However, we should verify the referenced workflow file contains the necessary changes for the new caching mechanism.

✅ Verification successful

Based on the output and the learning note about CI workflows not requiring validation steps for cache configuration variables, I can generate the final response:

Docker image workflow changes are properly configured

The referenced workflow .github/workflows/release-docker-image.yml contains all the necessary cache-related configurations:

  • Uses environment variables for cache region, bucket, and endpoint
  • Properly handles cache credentials through secrets
  • Follows the established pattern mentioned in the learnings for CI workflows
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify Docker workflow configuration

# Check release-docker-image.yml for cache configuration
if [ -f ".github/workflows/release-docker-image.yml" ]; then
  # Check for cache-related inputs and secret mounts
  rg -A 5 'cache_|secret.*mount' .github/workflows/release-docker-image.yml
fi

Length of output: 548


80-80: Verify build functionality with removed AWS environment variables

The removal of AWS-related environment variables aligns with the PR objective of moving to secret mounts. However, we should verify that the build process still works correctly with this change.

✅ Verification successful

AWS environment variables safely moved to secret mounts

The verification shows that the AWS-related environment variables have been properly migrated to secret mounts in the workflow. The build process remains functional as:

  • AWS credentials are now properly passed via secrets (secrets.CACHE_KEY_ID, secrets.CACHE_SECRET_KEY)
  • S3 configuration is handled via variables (vars.CACHE_S3_BUCKET, vars.AWS_REGION, vars.CACHE_S3_ENDPOINT)
  • SCCACHE configuration is properly set up in the .github/actions/sccache action
  • Docker compose files still reference the necessary environment variables, which will be populated from the new secret mounts
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for any remaining direct AWS environment variable usage in build scripts

# Search for AWS environment variable references in build scripts
rg -l '(AWS_|SCCACHE_)' 'scripts/' 'package.json' 'Cargo.toml'

Length of output: 58


Script:

#!/bin/bash
# Cast a wider net to find AWS/SCCACHE references in build-related files
rg -i '(aws_|sccache)' -g '*.{yml,yaml,sh,toml,json,rs}'

# Also check for any remaining environment variables in the release workflow
cat .github/workflows/release.yml

Length of output: 12395

Dockerfile (4)

22-37: LGTM! Well-documented sccache configuration.

The documentation clearly explains the requirements for different caching backends (S3, GitHub Actions, memcached) and their respective configuration variables.


180-225: LGTM! Robust sccache configuration with proper error handling.

The implementation:

  • Ensures only one cache backend is active at a time
  • Properly quotes environment variables
  • Correctly configures compilers to use sccache
  • Disables incremental builds as required by sccache

198-207: LGTM! Secure AWS credentials handling.

The implementation follows security best practices:

  • Uses Docker secrets for AWS credentials
  • Sets proper permissions (0700) for .aws directory
  • Validates credentials file existence at runtime

365-366: Verify consistent usage of secret mounts across build stages.

The AWS credentials secret mount is added to multiple build stages. Let's verify it's used consistently.

Also applies to: 386-386, 445-445, 481-481, 534-534

✅ Verification successful

AWS secret mount is consistently used across all required cargo operations

The verification shows that all source $HOME/.cargo/env commands that require AWS credentials are properly paired with --mount=type=secret,id=AWS. The only instances where the secret mount is not present are:

  • A commented out test section
  • Initial cargo installation steps that don't require AWS credentials
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistent usage of AWS secret mounts across build stages

# Look for RUN instructions with secret mounts
rg --type dockerfile 'RUN.*--mount=type=secret,id=AWS'

# Look for potential missing secret mounts in build stages
rg --type dockerfile '^FROM.*build-.*AS' -A 10 | grep -B 10 'RUN.*source.*env' | grep -v 'mount=type=secret,id=AWS'

Length of output: 242


Script:

#!/bin/bash
# Search for AWS secret mount patterns in Dockerfile using basic grep
grep -A 1 'RUN.*--mount=type=secret,id=AWS' Dockerfile

# Search for all RUN commands that source cargo env to compare
grep -B 2 'source.*cargo/env' Dockerfile

Length of output: 1368

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Outside diff range and nitpick comments (4)
.github/actions/sccache/action.yaml (2)

5-29: Consider enhancing input validation and documentation.

A few suggestions to improve the robustness of the inputs:

  1. Add pattern validation for region to ensure it matches AWS region format (e.g., us-east-1).
  2. Add URL validation for endpoint.
  3. Document the expected format for platform input with examples.
  4. Consider using GitHub Variables for the default version to make updates easier.
   region:
     description: S3 bucket region
     required: true
+    pattern: '^[a-z]{2}-[a-z]+-\d{1}$'
   endpoint:
     description: S3 endpoint to use for caching
     required: true
+    pattern: '^https?:\/\/.*$'
   platform:
-    description: "Platform and architecture to use when caching; helps to avoid invalid cache on different arch"
+    description: "Platform and architecture to use when caching (e.g., 'x86_64', 'aarch64'); helps to avoid invalid cache on different arch"
   version:
     description: "sccache version"
-    default: "0.8.2"
+    default: "${{ vars.SCCACHE_VERSION }}"

31-31: Address the TODO comment about caching dependencies.

The comment suggests an opportunity to optimize the action by caching dependencies to save time.

Would you like me to help implement dependency caching for this action? This could involve:

  1. Adding a cache step for the sccache binary
  2. Implementing dependency caching for the build process
.github/actions/docker/action.yaml (2)

28-45: LGTM! Consider adding example values in descriptions.

The new cache-related input parameters are well-structured and properly documented. The consistent cache_ prefix helps distinguish caching parameters from other configurations.

Consider adding example values in the descriptions for better clarity:

   cache_bucket:
-    description: S3 bucket to use for caching (both sccache and layer cache)
+    description: S3 bucket to use for caching (both sccache and layer cache), e.g., 'my-cache-bucket'

178-187: Consider making AWS profile name configurable.

While the configuration looks good, the AWS profile name 'sccache' is hardcoded. Consider making it configurable through an input parameter for better flexibility.

  inputs:
+   cache_aws_profile:
+     description: AWS profile name for sccache configuration
+     default: sccache
    ...
  build-args: |
    ...
-   AWS_PROFILE=sccache
+   AWS_PROFILE=${{ inputs.cache_aws_profile }}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 0928f49 and f7ffa9a.

📒 Files selected for processing (2)
  • .github/actions/docker/action.yaml (5 hunks)
  • .github/actions/sccache/action.yaml (1 hunks)
🔇 Additional comments (3)
.github/actions/sccache/action.yaml (1)

35-40: Review the sccache-action version.

The action uses mozilla-actions/[email protected] which is an early version. Consider:

  1. Checking for newer versions
  2. Verifying stability and features of the current version
  3. Adding a comment explaining why this specific version was chosen
✅ Verification successful

The current version v0.0.6 is the latest stable release and includes important improvements

Based on the GitHub API results:

  • v0.0.6 is the latest release (September 2024) with significant improvements:
    • Fixed string interpolation issues
    • Improved local cache handling
    • Added GitHub Enterprise Server support
    • Multiple dependency updates for security and stability

The current version being used is appropriate and up-to-date. No action needed.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check latest version and recent changes of mozilla-actions/sccache-action
gh api repos/mozilla-actions/sccache-action/releases/latest --jq '.tag_name'
gh api repos/mozilla-actions/sccache-action/releases --jq '.[0:3] | .[] | {tag_name, published_at, body}'

Length of output: 8672

.github/actions/docker/action.yaml (2)

86-89: LGTM! Cache configuration properly isolates by platform.

The layer cache configuration correctly uses the new cache parameters and properly isolates cache by platform in the prefix path.


156-166: Verify sccache installation in Dockerfile.

The sccache configuration looks good, but since install: false is set, ensure that sccache is properly installed in your Dockerfile.

✅ Verification successful

sccache installation is properly configured in Dockerfile

The verification confirms that sccache is comprehensively installed and configured in the Dockerfile:

  • Installed via the deps-sccache stage using the correct version (0.8.2)
  • Properly configured for multiple cache backends (GitHub Actions, S3, memcached)
  • Compiler wrappers are set up correctly (CC, CXX, RUSTC_WRAPPER)
  • Installation is verified with stats checks throughout the build process
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if sccache is installed in Dockerfile
# Expected: Find sccache installation commands in Dockerfile

rg -A 3 'sccache|SCCACHE' Dockerfile

Length of output: 5984

.github/actions/sccache/action.yaml Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Outside diff range and nitpick comments (3)
.github/actions/sccache/action.yaml (3)

4-30: Enhance input validation and security.

Consider the following improvements for the action inputs:

  1. Add pattern validation for the AWS region format
  2. Add URL validation for the S3 endpoint
  3. Mark sensitive inputs with the sensitive: true property to prevent logging

Apply this diff to enhance input validation and security:

 inputs:
   bucket:
     description: S3 bucket to use for caching
     required: true
   region:
     description: S3 bucket region
     required: true
+    pattern: '^[a-z]{2}(-gov)?-[a-z]+-\d{1}$'
   endpoint:
     description: S3 endpoint to use for caching
     required: true
+    pattern: '^https?:\/\/.*$'
   access_key_id:
     description: S3 endpoint access key ID
     required: true
+    sensitive: true
   secret_access_key:
     description: S3 endpoint secret access key
     required: true
+    sensitive: true

32-32: Address the TODO comment about dependency caching.

The comment suggests caching dependencies could save ~1 minute of execution time. This could be implemented using GitHub Actions cache.

Would you like me to help implement the dependency caching strategy? I can:

  1. Generate the cache configuration using actions/cache@v3
  2. Create a new GitHub issue to track this optimization

42-48: Consider making the AWS profile configurable.

The AWS profile is hardcoded as "sccache". Consider making it an optional input parameter with "sccache" as the default value.

 inputs:
+  profile:
+    description: "AWS profile name to use"
+    required: false
+    default: "sccache"
   ...
   with:
     access_key_id: ${{ inputs.access_key_id }}
     secret_access_key: ${{ inputs.secret_access_key }}
-    profile: "sccache"
+    profile: ${{ inputs.profile }}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between f7ffa9a and e8bb748.

📒 Files selected for processing (3)
  • .github/actions/docker/action.yaml (5 hunks)
  • .github/actions/rust/action.yaml (1 hunks)
  • .github/actions/sccache/action.yaml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/actions/docker/action.yaml
  • .github/actions/rust/action.yaml
🔇 Additional comments (1)
.github/actions/sccache/action.yaml (1)

36-41: Verify the sccache-action version.

The action uses mozilla-actions/[email protected]. Consider:

  1. Using a more stable version if available
  2. Adding a comment explaining why this specific version was chosen
✅ Verification successful

The action is using the latest available version

The repository is currently using mozilla-actions/[email protected], which is the latest released version. The recent v0.0.6 release includes important fixes for string interpolation, local caching, and GitHub Enterprise Server support, making it a stable choice.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for latest versions and changes in mozilla-actions/sccache-action

# Get latest release version
gh api repos/mozilla-actions/sccache-action/releases/latest --jq .tag_name

# Get changelog or release notes
gh api repos/mozilla-actions/sccache-action/releases --jq '.[0].body'

Length of output: 2229

.github/actions/sccache/action.yaml Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (2)
Dockerfile (2)

22-37: Documentation looks good, but could be enhanced.

The documentation clearly explains the sccache configuration options. However, consider adding examples of how to provide the secret mounts during build time.

Add the following to the documentation:

 #       - also, AWS credentials file ($HOME/.aws/credentials) should be provided as a secret file with id=AWS
+#       Example: docker build --secret id=AWS,src=$HOME/.aws/credentials ...
 #    2. For Github Actions:
 #       - SCCACHE_GHA_ENABLED, ACTIONS_CACHE_URL
 #       - also, Github Actions token should be provided as a secret file with id=GHA
+#       Example: docker build --secret id=GHA,src=$ACTIONS_RUNTIME_TOKEN ...

48-58: Improve deps image selection logic robustness.

The current implementation concatenates variables to determine if sccache is enabled. While clever, this approach might be fragile if any of the variables contain unexpected values.

Consider using a more explicit approach:

-ARG DEPS_IMAGE=${SCCACHE_GHA_ENABLED}${SCCACHE_BUCKET}${SCCACHE_MEMCACHED}
-ARG DEPS_IMAGE=${DEPS_IMAGE:+sccache}
-ARG DEPS_IMAGE=deps-${DEPS_IMAGE:-base}
+ARG DEPS_IMAGE=deps-$([ -n "${SCCACHE_GHA_ENABLED}${SCCACHE_BUCKET}${SCCACHE_MEMCACHED}" ] && echo "sccache" || echo "base")
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between e8bb748 and 646c830.

📒 Files selected for processing (1)
  • Dockerfile (10 hunks)
🧰 Additional context used
📓 Learnings (1)
Dockerfile (2)
Learnt from: lklimek
PR: dashpay/platform#2344
File: Dockerfile:198-207
Timestamp: 2024-11-25T13:09:41.979Z
Learning: In the `Dockerfile`, credentials are managed by Docker secret mounts (e.g., `--mount=type=secret,id=AWS`), so there's no need to add cleanup steps to wipe credentials after use.
Learnt from: lklimek
PR: dashpay/platform#2344
File: Dockerfile:55-58
Timestamp: 2024-11-25T12:59:13.055Z
Learning: In Dockerfile multi-stage builds, variables defined within `RUN` instructions are not available in `FROM` commands in subsequent stages.
🔇 Additional comments (1)
Dockerfile (1)

198-207: AWS credentials handling looks secure.

The implementation correctly uses Docker secret mounts and includes proper validation. The credentials are not persisted in image layers, as they are mounted at runtime.

Dockerfile Outdated Show resolved Hide resolved
Dockerfile Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (3)
Dockerfile (3)

22-37: Documentation looks good, minor enhancement suggested.

The documentation clearly explains the sccache configuration options. Consider adding an example of the secret mount command for better clarity.

 # sccache cache backends
 #
 # To enable sccache support and make the following variables available:
+# Example: docker build --secret id=AWS,src=credentials.txt ...

49-58: Consider making the image selection logic more explicit.

The current string concatenation approach works but might be less obvious to maintainers. A more explicit approach using shell commands could improve readability.

-ARG DEPS_IMAGE=${SCCACHE_GHA_ENABLED}${SCCACHE_BUCKET}${SCCACHE_MEMCACHED}
-ARG DEPS_IMAGE=${DEPS_IMAGE:+sccache}
-ARG DEPS_IMAGE=deps-${DEPS_IMAGE:-base}
+# Set DEPS_VARIANT in a RUN command for clarity
+RUN DEPS_VARIANT="base"; \
+    if [ -n "${SCCACHE_GHA_ENABLED}${SCCACHE_BUCKET}${SCCACHE_MEMCACHED}" ]; then \
+        DEPS_VARIANT="sccache"; \
+    fi; \
+    echo "DEPS_VARIANT=${DEPS_VARIANT}" >> /docker-env
+# Use the computed value
+ARG DEPS_IMAGE=deps-${DEPS_VARIANT}

183-228: Well-structured sccache configuration with good error handling.

The implementation properly handles different cache backends and includes good error checking for credentials. Consider adding validation for required variables earlier in the configuration.

 if [ -n "${SCCACHE_GHA_ENABLED}" ]; then
+    # Validate required variables upfront
+    [ -n "${ACTIONS_CACHE_URL}" ] || { echo "Error: ACTIONS_CACHE_URL is required for GHA cache"; exit 1; }
     echo "export SCCACHE_GHA_ENABLED=${SCCACHE_GHA_ENABLED}" >> /root/env
     echo "export ACTIONS_CACHE_URL=${ACTIONS_CACHE_URL}" >> /root/env
 elif [ -n "${SCCACHE_BUCKET}" ]; then
+    # Validate required variables upfront
+    [ -n "${SCCACHE_REGION}" ] || { echo "Error: SCCACHE_REGION is required for S3 cache"; exit 1; }
     echo "export SCCACHE_BUCKET='${SCCACHE_BUCKET}'" >> /root/env
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 646c830 and f33c8c7.

📒 Files selected for processing (1)
  • Dockerfile (13 hunks)
🧰 Additional context used
📓 Learnings (1)
Dockerfile (2)
Learnt from: lklimek
PR: dashpay/platform#2344
File: Dockerfile:198-207
Timestamp: 2024-11-25T13:09:41.979Z
Learning: In the `Dockerfile`, credentials are managed by Docker secret mounts (e.g., `--mount=type=secret,id=AWS`), so there's no need to add cleanup steps to wipe credentials after use.
Learnt from: lklimek
PR: dashpay/platform#2344
File: Dockerfile:55-58
Timestamp: 2024-11-25T12:59:13.055Z
Learning: In Dockerfile multi-stage builds, variables defined within `RUN` instructions are not available in `FROM` commands in subsequent stages.
🔇 Additional comments (2)
Dockerfile (2)

201-210: Verify secure credential handling.

The AWS credentials handling looks secure with proper secret mounts. Let's verify that credentials are not accidentally included in any intermediate or final image layers.

✅ Verification successful

AWS credentials handling is secure

The credential handling implementation follows security best practices:

  • AWS credentials are properly mounted as secrets using Docker's secret mount feature
  • Credentials are symlinked from /run/secrets/AWS which is an ephemeral mount point
  • The .aws directory has restricted 700 permissions
  • The credentials file location is exported as an environment variable
  • There's a validation check to ensure credentials are mounted correctly
  • No actual credentials are hardcoded or stored in the image layers
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for potential credential leaks in the Dockerfile
# Test: Look for patterns that might expose credentials

# Check for direct credential handling
rg -i '(aws_access|aws_secret|credentials|\.aws)' 

# Check for environment exports that might contain credentials
rg 'export.*AWS' 

Length of output: 23659


370-370: Verify consistent secret mount usage across build stages.

The secret mount --mount=type=secret,id=AWS is used in multiple build stages. Ensure all stages that need AWS credentials have this mount configured.

Also applies to: 390-390, 448-448, 483-483, 535-535

✅ Verification successful

Let me analyze the output to verify the secret mount usage.

The output shows several RUN commands with different types of mounts:

  1. AWS secret mounts (--mount=type=secret,id=AWS) are used in build stages for:

    • Initial AWS-related setup
    • RocksDB cloning
    • Cargo operations (binstall, chef prepare)
  2. Cache mounts (--mount=type=cache) are used for Cargo registry and git operations

Looking at the commands that don't have AWS secret mounts, they are primarily:

  • System package installations
  • Basic setup commands
  • Yarn/npm operations
  • Binary verification (ldd)
  • User/permission setup

The AWS secret mount appears to be consistently used in all stages where AWS credentials might be needed (primarily for cargo/rust operations). The stages without the AWS secret mount are operations that don't require AWS access.

AWS secret mounts are correctly configured across build stages

The secret mount --mount=type=secret,id=AWS is consistently used in all relevant build stages that require AWS credentials. Other stages appropriately omit the mount as they don't need AWS access.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistency in secret mount usage
# Test: All RUN commands that might need AWS credentials should have the secret mount

# Search for RUN commands and verify secret mounts
rg -A 2 '^RUN' | rg -v 'apk add|npm config|mkdir|addgroup|cp|rm|mv|echo|ln -s'

Length of output: 3866

.github/actions/docker/action.yaml Show resolved Hide resolved
.github/workflows/tests.yml Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Outside diff range and nitpick comments (2)
.github/actions/sccache/action.yaml (2)

1-30: Consider enhancing input validation and version management.

A few suggestions for improvement:

  1. Add pattern validation for the S3 endpoint format
  2. Consider making the platform input required to avoid assumptions
  3. Consider using GitHub releases for version management
 inputs:
   endpoint:
     description: S3 endpoint to use for caching
     required: true
+    pattern: '^https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/?.*$'
   platform:
     description: "Platform and architecture to use when caching; defaults to linux/amd64"
-    required: false
-    default: "linux/amd64"
+    required: true
   version:
     description: "sccache version"
-    default: "0.8.2"
+    default: "${{ github.event.repository.releases.latest.tag_name }}"
     required: false

46-46: Address the TODO comment about caching dependencies.

The comment suggests an optimization opportunity to save execution time.

Would you like me to help implement dependency caching to save that minute of execution time?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between f33c8c7 and ba6507a.

📒 Files selected for processing (3)
  • .github/actions/docker/action.yaml (5 hunks)
  • .github/actions/s3-layer-cache-settings/action.yaml (4 hunks)
  • .github/actions/sccache/action.yaml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/actions/docker/action.yaml
  • .github/actions/s3-layer-cache-settings/action.yaml
🔇 Additional comments (2)
.github/actions/sccache/action.yaml (2)

63-75: Eliminate environment variable duplication and enhance error handling.

The environment variables are defined both in outputs and in the bash script. Additionally, the script lacks error handling.

The previous review comment about enhancing error handling and logging is still valid. Please refer to the existing comment for the suggested implementation.


50-55: Verify sccache version compatibility.

The action uses mozilla-actions/[email protected]. Let's verify its compatibility with the specified sccache version.

✅ Verification successful

Let me try another approach to verify the compatibility.


Let me verify the sccache version compatibility by checking the actual content of the mozilla-actions/sccache-action repository.


Let me try one more approach to verify the compatibility by checking the actual version being used in the workflow.


Let me check the actual default version value and the latest sccache release.


The sccache version configuration is correct and up to date

The workflow is using mozilla-actions/[email protected] with sccache v0.8.2, which matches the latest available sccache release (v0.8.2). The version is properly configured with a default value that matches the latest stable release.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check compatibility between mozilla-actions/sccache-action and sccache versions

# Get the latest supported sccache version from mozilla-actions/sccache-action
gh api repos/mozilla/sccache-action/contents/action.yml | jq -r '.content' | base64 -d | grep 'version:'

# Get the latest sccache release version
gh api repos/mozilla/sccache/releases/latest | jq -r '.tag_name'

Length of output: 271


Script:

#!/bin/bash
# Check the content of the workflow file to understand the sccache version being used
cat .github/actions/sccache/action.yaml

# Check if there are any version constraints or compatibility notes in README
fd README.md --exec cat {}

Length of output: 85986


Script:

#!/bin/bash
# Get the content of mozilla-actions/sccache-action repository's action.yml file
gh api repos/mozilla/sccache-action/contents/action.yml | jq -r '.content' | base64 -d || true

# Check if the version specified in our workflow matches the default version in the action
cat .github/actions/sccache/action.yaml | grep "version:"

Length of output: 301


Script:

#!/bin/bash
# Check the default version value in the workflow
cat .github/actions/sccache/action.yaml | grep -A 1 'version:'

# Check if there are any version-related issues mentioned in recent commits
git log -p .github/actions/sccache/action.yaml | grep -i "version"

Length of output: 154


Script:

#!/bin/bash
# Check the full input parameters including default values
cat .github/actions/sccache/action.yaml | grep -B 2 -A 2 'version:'

# Get the latest sccache release version for comparison
gh api repos/mozilla/sccache/releases/latest | jq -r '.tag_name'

Length of output: 407

.github/actions/sccache/action.yaml Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (2)
.github/actions/s3-layer-cache-settings/action.yaml (2)

28-33: Consider renaming credential parameters to avoid confusion

The parameters s3_access_key_id and s3_secret_access_key might cause confusion with the AWS credentials action parameters. Consider using more specific names to indicate their purpose for caching.

-  s3_access_key_id:
-    description: Access key ID for S3 cache
+  cache_access_key_id:
+    description: "Access key ID specifically for S3 layer caching"
-  s3_secret_access_key:
-    description: Secret access key for S3 cache
+  cache_secret_access_key:
+    description: "Secret access key specifically for S3 layer caching"

48-50: Consider making AWS profile name configurable

The AWS profile name is hardcoded to "docker-layers". Consider making it configurable through an input parameter for better flexibility.

Add a new input parameter:

  aws_profile_name:
    description: "Name of the AWS profile to use for S3 cache"
    default: "docker-layers"
    required: false
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between d100822 and 5fbe581.

📒 Files selected for processing (2)
  • .github/actions/docker/action.yaml (5 hunks)
  • .github/actions/s3-layer-cache-settings/action.yaml (4 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/actions/docker/action.yaml
🔇 Additional comments (2)
.github/actions/s3-layer-cache-settings/action.yaml (2)

1-1: LGTM! Quote style change is consistent with YAML best practices.


Line range hint 1-104: Verify compatibility with existing workflows and S3-compatible storage

These changes are part of a cost optimization effort. Please verify:

  1. All existing workflows using this action have been updated with the new required credentials parameters
  2. The endpoint configuration works with your target S3-compatible storage service

.github/actions/s3-layer-cache-settings/action.yaml Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (5)
.github/actions/aws_credentials/action.yaml (1)

1-22: Enhance input validation and security documentation

While the inputs are well-defined, consider adding:

  1. Input validation patterns for AWS credentials format
  2. Security implications in the description (e.g., credential file permissions, cleanup)

Apply this diff to enhance the action definition:

 inputs:
   access_key_id:
     description: Access key ID
     required: true
+    pattern: '^[A-Z0-9]{20}$'
   secret_access_key:
     description: Secret access key
     required: true
+    pattern: '^[A-Za-z0-9/+=]{40}$'
   profile:
     description: AWS profile to use; set AWS_PROFILE env variable to use this profile
     default: "default"
+    pattern: '^[a-zA-Z0-9_-]+$'
.github/actions/sccache/action.yaml (4)

4-4: Remove trailing space.

Remove the trailing space at the end of line 4.

-  Configure sccache caching. 
+  Configure sccache caching.
🧰 Tools
🪛 yamllint (1.35.1)

[error] 4-4: trailing spaces

(trailing-spaces)


9-11: Enhance AWS credentials conflict documentation.

The current description of AWS credential conflicts could be more specific about which actions typically cause conflicts and how to resolve them.

-  It can conflict with other actions that define AWS credentials or set AWS_PROFILE env variable.
-  Manually set AWS_PROFILE=sccache and unset AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in case
-  of conflicting settings.
+  Note: This action may conflict with other actions that configure AWS credentials (e.g., aws-actions/configure-aws-credentials).
+  To resolve conflicts:
+  1. Ensure this action runs after any other AWS credential configuration
+  2. If conflicts persist, manually set AWS_PROFILE=sccache
+  3. Unset AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY if needed

28-31: Add platform format validation.

The platform input should be validated to ensure it follows the expected format (e.g., 'linux/amd64', 'linux/arm64').

Add a validation step in the action:

 - name: Configure sccache
   shell: bash
   run: |
+    # Validate platform format
+    if [[ ! "${{ inputs.platform }}" =~ ^[a-z]+/[a-z0-9]+$ ]]; then
+      echo "Error: Invalid platform format. Expected format: os/arch (e.g., linux/amd64)"
+      exit 1
+    fi

54-54: Address TODO comment about dependency caching.

The TODO comment suggests an opportunity for performance optimization.

Would you like me to help implement dependency caching to save that minute? We could:

  1. Cache the ~/.cargo/registry directory
  2. Use GitHub Actions cache for Rust dependencies
  3. Implement intelligent cache invalidation based on Cargo.lock changes
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 5fbe581 and b910256.

📒 Files selected for processing (4)
  • .github/actions/aws_credentials/action.yaml (1 hunks)
  • .github/actions/docker/action.yaml (6 hunks)
  • .github/actions/s3-layer-cache-settings/action.yaml (3 hunks)
  • .github/actions/sccache/action.yaml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/actions/docker/action.yaml
  • .github/actions/s3-layer-cache-settings/action.yaml
🧰 Additional context used
🪛 yamllint (1.35.1)
.github/actions/aws_credentials/action.yaml

[error] 40-40: trailing spaces

(trailing-spaces)


[error] 41-41: trailing spaces

(trailing-spaces)


[error] 42-42: trailing spaces

(trailing-spaces)


[error] 43-43: trailing spaces

(trailing-spaces)


[error] 47-47: trailing spaces

(trailing-spaces)

.github/actions/sccache/action.yaml

[error] 4-4: trailing spaces

(trailing-spaces)

🔇 Additional comments (2)
.github/actions/aws_credentials/action.yaml (2)

26-35: Previous security recommendations are still applicable

The existing review comments about enhancing the security of credentials handling remain valid and should be addressed.


37-49: Fix formatting issues and apply previous recommendations

  1. The existing review comments about improving environment variable handling remain valid.
  2. Remove trailing spaces from lines 40-43 and 47 to fix yamllint warnings.
🧰 Tools
🪛 yamllint (1.35.1)

[error] 40-40: trailing spaces

(trailing-spaces)


[error] 41-41: trailing spaces

(trailing-spaces)


[error] 42-42: trailing spaces

(trailing-spaces)


[error] 43-43: trailing spaces

(trailing-spaces)


[error] 47-47: trailing spaces

(trailing-spaces)

.github/actions/aws_credentials/action.yaml Show resolved Hide resolved
.github/actions/sccache/action.yaml Show resolved Hide resolved
@lklimek lklimek merged commit 7393162 into v1.6-dev Nov 26, 2024
145 checks passed
@lklimek lklimek deleted the ci/change-s3 branch November 26, 2024 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

2 participants