79589920

Date: 2025-04-24 06:13:16
Score: 0.5
Natty:
Report link
            steps:
              - task: DownloadPipelineArtifact@2
                displayName: 'Download Artifact'
                inputs:
                  buildtype: 'current'
                  downloadtype: 'specific'
                  downloadPath: '$(System.ArtifactoryDirectory)'
                  targetPath: '$(System.ArtifactoryDirectory)'
              - task: Bash@3
                displayName: 'Copy and Upload to BrowserStack (App Live & App Automate)'
                inputs:
                  targetType: inline
                  script: |
                    #!/bin/bash

                    # Define directories
                    SOURCE_DIR="$(System.ArtifactsDirectory)"
                    DEFAULT_DIR="$(System.DefaultWorkingDirectory)"
                    DEST_DIR="$DEFAULT_DIR/artifacts"

                    # BrowserStack Upload URLs
                    APP_LIVE_UPLOAD_URL="https://api-cloud.browserstack.com/app-live/upload"
                    APP_AUTOMATE_UPLOAD_URL="https://api-cloud.browserstack.com/app-automate/upload"

                    # Replace with your actual BrowserStack username and access key, and securely reference them using variable groups from the Azure DevOps Library.)
                    BROWSERSTACK_USERNAME="resfeber_JwNHAx"
                    BROWSERSTACK_ACCESS_KEY="Enter Your Key Here"

                    # Create destination directory if it doesn't exist
                    mkdir -p "$DEST_DIR"

                    # Find and copy matching APK and IPA files from both SOURCE_DIR and DEFAULT_DIR
                    find "$SOURCE_DIR" "$DEFAULT_DIR" -type f \( -name "*.apk or.aab" -o -name "*.ipa" \) -exec cp {} "$DEST_DIR" \;

                    echo "✅ Matching artifacts copied to $DEST_DIR"

                    # List files in the destination directory
                    ls -al "$DEST_DIR"

                    # Find the latest artifact
                    ARTIFACT_PATH=$(ls -t "$DEST_DIR"/*.apk or .aab "$DEST_DIR"/*.ipa 2>/dev/null | head -n 1)

                    # Check if an artifact was found
                    if [[ -z "$ARTIFACT_PATH" ]]; then
                        echo "❌ Error: No valid artifact found in $DEST_DIR" >&2
                        exit 1
                    fi

                    echo "✅ Artifact selected for upload: $ARTIFACT_PATH"

                    # Function to upload to BrowserStack
                    upload_to_browserstack() {
                        local UPLOAD_URL=$1
                        local UPLOAD_TYPE=$2

                        echo "🚀 Uploading to BrowserStack $UPLOAD_TYPE..."

                        RESPONSE=$(curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
                            -X POST "$UPLOAD_URL" \
                            -F "file=@$ARTIFACT_PATH")

                        echo "📤 Upload response: $RESPONSE"

                        # Extract app_url from response
                        APP_URL=$(echo "$RESPONSE" | jq -r '.app_url')

                        if [[ -n "$APP_URL" && "$APP_URL" != "null" ]]; then
                            echo "✅ $UPLOAD_TYPE Upload Successful!"
                            echo "🔗 Use this link to open the app in BrowserStack $UPLOAD_TYPE: $APP_URL"
                        else
                            echo "❌ Error: Upload to $UPLOAD_TYPE failed!" >&2
                            exit 1
                        fi
                    }

                    # Upload to both App Live and App Automate
                    upload_to_browserstack "$APP_LIVE_UPLOAD_URL" "App Live"
                    upload_to_browserstack "$APP_AUTOMATE_UPLOAD_URL" "App Automate"
Reasons:
  • Blacklisted phrase (1): this link
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (0.5):
Posted by: Resfeber Eudaimonia