diff --git a/.github/workflows/e2e_tests.yaml b/.github/workflows/e2e_tests.yaml new file mode 100644 index 0000000..037edd1 --- /dev/null +++ b/.github/workflows/e2e_tests.yaml @@ -0,0 +1,40 @@ +name: Pull Request +on: pull_request + +permissions: read-all + +jobs: + tests: + runs-on: ubuntu-latest + name: E2E Tests + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: oracle + java-version: "17" + + - name: Setup Bazel + # trunk-ignore(semgrep): Trust third-party `bazelbuild` GH Action + uses: bazelbuild/setup-bazelisk@v2 + + - name: Compute Impacted Targets + id: compute + run: ./src/scripts/compute_impacted_targets.sh + shell: bash + env: + MERGE_INSTANCE_BRANCH: main + PR_BRANCH: do_not_delete/stable_test_branch + VERBOSE: 1 + WORKSPACE_PATH: ./tests/simple_bazel_workspace + + - name: Validate Impacted Targets Computation + shell: bash + run: | + target_count=`cat ${{ steps.compute.outputs.impacted_targets_out }} | wc -l` + if [[ $target_count -ne 2 ]]; then + exit 1 + fi diff --git a/action.yaml b/action.yaml index 03eb18c..998db47 100644 --- a/action.yaml +++ b/action.yaml @@ -11,6 +11,11 @@ inputs: The Merge Instance's target branch. If unspecified, defaults to the repository's default branch. required: false + bazel-workspace-path: + description: + The path to the bazel WORKSPACE, relative to the root of the git repository. If unspecified, + defaults to the root of the repository. + required: false verbose: description: Whether to enable verbose logging. Defaults to false. required: false @@ -25,6 +30,7 @@ runs: java-version: "17" - name: Setup Bazel + # trunk-ignore(semgrep): Trust third-party `bazelbuild` GH Action uses: bazelbuild/setup-bazelisk@v2 - name: Setup Tools @@ -38,8 +44,9 @@ runs: run: ${GITHUB_ACTION_PATH}/src/scripts/prerequisites.sh shell: bash env: - TARGET_BRANCH: ${{ inputs.target-branch }} DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + TARGET_BRANCH: ${{ inputs.target-branch }} + WORKSPACE_PATH: ${{ inputs.bazel-workspace-path }} - name: Compute Impacted Targets id: compute-impacted-targets @@ -49,6 +56,7 @@ runs: MERGE_INSTANCE_BRANCH: ${{ steps.prerequisites.outputs.merge_instance_branch }} PR_BRANCH: ${{ github.head_ref }} VERBOSE: ${{ inputs.verbose }} + WORKSPACE_PATH: ${{ steps.prerequisites.outputs.workspace_path }} - name: Upload Impacted Targets run: ${GITHUB_ACTION_PATH}/src/scripts/upload_impacted_targets.sh diff --git a/src/scripts/compute_impacted_targets.sh b/src/scripts/compute_impacted_targets.sh index ec293f3..4a5eb93 100755 --- a/src/scripts/compute_impacted_targets.sh +++ b/src/scripts/compute_impacted_targets.sh @@ -17,13 +17,17 @@ if [[ (-z ${MERGE_INSTANCE_BRANCH}) || (-z ${PR_BRANCH}) ]]; then exit 2 fi +if [[ -z ${WORKSPACE_PATH} ]]; then + echo "Missing workspace path" + exit 2 +fi + logIfVerbose "Fetching all remotes..." git fetch --all --quiet logIfVerbose "...done!" # Install the bazel-diff JAR. Avoid cloning the repo, as there will be conflicting WORKSPACES. curl -Lo bazel-diff.jar https://github.com/Tinder/bazel-diff/releases/latest/download/bazel-diff_deploy.jar -workspace_path=$(pwd) git switch "${MERGE_INSTANCE_BRANCH}" git fetch --unshallow --quiet @@ -59,11 +63,11 @@ impacted_targets_out=./impacted_targets_${pr_branch_head_sha} # Generate Hashes for the Merge Instance Branch git switch "${MERGE_INSTANCE_BRANCH}" -java -jar bazel-diff.jar generate-hashes --workspacePath="${workspace_path}" "${merge_instance_branch_out}" +java -jar bazel-diff.jar generate-hashes --workspacePath="${WORKSPACE_PATH}" "${merge_instance_branch_out}" # Generate Hashes for the Merge Instance Branch + PR Branch git -c "user.name=Trunk Actions" -c "user.email=actions@trunk.io" merge --squash "${PR_BRANCH}" -java -jar bazel-diff.jar generate-hashes --workspacePath="${workspace_path}" "${merge_instance_with_pr_branch_out}" +java -jar bazel-diff.jar generate-hashes --workspacePath="${WORKSPACE_PATH}" "${merge_instance_with_pr_branch_out}" # Compute impacted targets java -jar bazel-diff.jar get-impacted-targets --startingHashes="${merge_instance_branch_out}" --finalHashes="${merge_instance_with_pr_branch_out}" --output="${impacted_targets_out}" diff --git a/src/scripts/prerequisites.sh b/src/scripts/prerequisites.sh index 0c06084..02bffcd 100755 --- a/src/scripts/prerequisites.sh +++ b/src/scripts/prerequisites.sh @@ -12,5 +12,12 @@ if [[ -z ${merge_instance_branch} ]]; then exit 2 fi +# trunk-ignore(shellcheck/SC2153): Passed in as env variable +workspace_path="${WORKSPACE_PATH}" +if [[ -z ${workspace_path} ]]; then + workspace_path=$(pwd) +fi + # Outputs echo "merge_instance_branch=${merge_instance_branch}" >>"${GITHUB_OUTPUT}" +echo "workspace_path=${workspace_path}" >>"${GITHUB_OUTPUT}"