Add object storage endpoints data source #3719
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
pull_request: | |
workflow_dispatch: | |
inputs: | |
test_suite: | |
description: "Specify test suite to run from inside 'linode/' directory. Examples: 'account', 'domain', etc. If not provided, all suites are executed" | |
required: false | |
default: 'integration' | |
sha: | |
description: 'Specify commit hash to test. This value is mandatory to ensure the tests run against a specific commit' | |
required: true | |
pull_request_number: | |
description: 'Specify pull request number associated with the commit. Optional, but recommended when providing a commit hash (sha)' | |
required: false | |
run_long_tests: | |
description: 'Choose whether to run long-duration tests that may take additional time. Set to "true" to enable long tests e.g. database related cases. Default is "false"' | |
required: false | |
default: 'false' | |
type: choice | |
options: | |
- 'true' | |
- 'false' | |
name: Integration tests on PR | |
jobs: | |
integration-fork: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'workflow_dispatch' && inputs.sha != '' | |
steps: | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: 'stable' | |
- run: go version | |
- uses: actions/github-script@v7 | |
id: disallowed-character-check | |
env: | |
text: ${{ inputs.test_suite }} | |
with: | |
result-encoding: string | |
script: | | |
let regex = /[^a-z0-9./]/; | |
let result = regex.test(process.env.text); | |
if (result) { | |
return "not pass"; | |
} else { | |
return "pass"; | |
} | |
# Check out merge commit | |
- name: Checkout PR | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.sha }} | |
fetch-depth: 0 | |
submodules: 'recursive' | |
- run: make deps | |
- run: make TEST_SUITE="${{ inputs.test_suite }}" test-int | |
if: ${{ steps.disallowed-character-check.outputs.result == 'pass' }} | |
env: | |
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }} | |
RUN_LONG_TESTS: ${{ inputs.run_long_tests }} | |
- name: Get the hash value of the latest commit from the PR branch | |
uses: octokit/[email protected] | |
id: commit-hash | |
if: ${{ inputs.pull_request_number != '' }} | |
with: | |
query: | | |
query PRHeadCommitHash($owner: String!, $repo: String!, $pr_num: Int!) { | |
repository(owner:$owner, name:$repo) { | |
pullRequest(number: $pr_num) { | |
headRef { | |
target { | |
... on Commit { | |
oid | |
} | |
} | |
} | |
} | |
} | |
} | |
owner: ${{ github.event.repository.owner.login }} | |
repo: ${{ github.event.repository.name }} | |
pr_num: ${{ fromJSON(inputs.pull_request_number) }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- uses: actions/github-script@v7 | |
id: update-check-run | |
if: ${{ steps.disallowed-character-check.outputs.result == 'pass' && inputs.pull_request_number != '' && fromJson(steps.commit-hash.outputs.data).repository.pullRequest.headRef.target.oid == inputs.sha }} | |
env: | |
number: ${{ inputs.pull_request_number }} | |
job: ${{ github.job }} | |
conclusion: ${{ job.status }} | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const { data: pull } = await github.rest.pulls.get({ | |
...context.repo, | |
pull_number: process.env.number | |
}); | |
const ref = pull.head.sha; | |
const { data: checks } = await github.rest.checks.listForRef({ | |
...context.repo, | |
ref | |
}); | |
const check = checks.check_runs.filter(c => c.name === process.env.job); | |
const { data: result } = await github.rest.checks.update({ | |
...context.repo, | |
check_run_id: check[0].id, | |
status: 'completed', | |
conclusion: process.env.conclusion | |
}); | |
return result; | |
apply-calico-rules: | |
runs-on: ubuntu-latest | |
needs: [integration-fork] | |
if: ${{ success() || failure() }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
submodules: 'recursive' | |
- name: Download kubectl and calicoctl for LKE clusters | |
run: | | |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" | |
curl -LO "https://github.com/projectcalico/calico/releases/download/v3.25.0/calicoctl-linux-amd64" | |
chmod +x calicoctl-linux-amd64 kubectl | |
mv calicoctl-linux-amd64 /usr/local/bin/calicoctl | |
mv kubectl /usr/local/bin/kubectl | |
- name: Apply Calico Rules to LKE | |
run: | | |
cd e2e_scripts/cloud_security_scripts/lke_calico_rules/ && ./lke_calico_rules_e2e.sh | |
env: | |
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }} | |
add-fw-lke-nodes: | |
runs-on: ubuntu-latest | |
needs: [integration-fork] | |
if: ${{ success() || failure() }} | |
steps: | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install Linode CLI | |
run: | | |
pip install linode-cli | |
- name: Create Firewall and Attach to Instances | |
run: | | |
FIREWALL_ID=$(linode-cli firewalls create --label "e2e-fw-$(date +%s)" --rules.inbound_policy "DROP" --rules.outbound_policy "ACCEPT" --text --format=id --no-headers) | |
echo "Created Firewall with ID: $FIREWALL_ID" | |
for instance_id in $(linode-cli linodes list --format "id" --text --no-header); do | |
echo "Attaching firewall to instance: $instance_id" | |
if linode-cli firewalls device-create "$FIREWALL_ID" --id "$instance_id" --type linode; then | |
echo "Firewall attached to instance $instance_id successfully." | |
else | |
echo "An error occurred while attaching firewall to instance $instance_id. Skipping..." | |
fi | |
done | |
env: | |
LINODE_CLI_TOKEN: ${{ secrets.DX_LINODE_TOKEN }} |