Skip to content

Commit a5788f0

Browse files
Merge branch 'develop' into chore/1.x/remove_feature_requests
2 parents fd6ec9f + b2038a7 commit a5788f0

File tree

159 files changed

+3578
-2609
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

159 files changed

+3578
-2609
lines changed

.github/pull_request_template.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ Replace this block with what this PR does and why. Describe what you'd like revi
44
)
55

66
### Jira ticket
7-
_Link to related jira ticket ([Use the smart commits](https://support.atlassian.com/bitbucket-cloud/docs/use-smart-commits/))_
7+
_Link to related jira ticket ([Use the smart commits](https://support.atlassian.com/bitbucket-cloud/docs/use-smart-commits/)). Short version (e.g. MTT-123) also works and gets auto-linked_
88

99
### Changelog
1010
[//]: # (updated with all public facing changes - API changes, UI/UX changes, behaviour changes, bug fixes. Remove if not relevant.)
1111

1212
- Added: The package whose Changelog should be added to should be in the header. Delete the changelog section entirely if it's not needed.
1313
- Fixed: If you update multiple packages, create a new section with a new header for the other package.
14-
- Removed/Deprecated/Changed: Each bullet should be prefixed with Added, Fixed, Removed, Deprecated, or Changed to indicate where the entry should go
14+
- Removed/Deprecated/Changed: Each bullet should be prefixed with Added, Fixed, Removed, Deprecated, or Changed to indicate where the entry should go.
1515

1616
<!-- Uncomment and mark items off with a * if this PR deprecates any API:
1717
### Deprecated API
@@ -31,12 +31,14 @@ We should always evaluate if the changes in this PR require any documentation ch
3131
- Includes documentation for previously-undocumented public API entry points.
3232
- Includes edits to existing public API documentation.
3333

34-
## Testing & QA
34+
## Testing & QA (How your changes can be verified during release Playtest)
3535
[//]: # (
3636
This section is REQUIRED and should describe how the changes were tested and how should they be tested when Playtesting for the release.
3737
It can range from "edge case covered by unit tests" to "manual testing required and new sample was added".
3838
Expectation is that PR creator does some manual testing and provides a summary of it here.)
3939

40+
<!-- Add any performance testing results here if relevant. -->
41+
4042
### Functional Testing
4143
[//]: # (If checked, List manual tests that have been performed.)
4244
_Manual testing :_
@@ -50,12 +52,13 @@ _Does the change require QA team to:_
5052

5153
- [ ] `Review automated tests`?
5254
- [ ] `Execute manual tests`?
55+
- [ ] `Provide feedback about the PR`?
5356

54-
If any boxes above are checked, please add QA as a PR reviewer.
57+
If any boxes above are checked the QA team will be automatically added as a PR reviewer.
5558

56-
## Backport
59+
## Backports
5760
[//]: # (
5861
This section is REQUIRED and should link to the PR that targets other NGO version which is either develop or develop-2.0.0 branch
5962
Add the following to the PR title: "\[Backport\] ..."
6063
If this is not needed, for example feature specific to NGOv2.X, then just mention this fact.
61-
)
64+
)

.github/workflows/mark-stale-issue.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
issues: write
1919

2020
steps:
21-
- uses: actions/stale@v9
21+
- uses: actions/stale@v10
2222
with:
2323
# Only mark issues (not PRs) as stale
2424
any-of-labels: 'stat:awaiting-response'

.github/workflows/pr-verification.yml renamed to .github/workflows/pr-description-validation.yml

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# This workflow is designed to verify that the pull request description contains a required sections that are important from quality perspective.
1+
# This workflow is designed to verify that the pull request description contains a required sections that are important from quality perspective.
22
# ## Backport section is important as a reminder to account for backports for anyone that works with NGO repository (to 1.X or 2.X branches respectively).
33
# ## Testing & QA section is important to ensure that the PR has appropriate testing coverage and is important when QA will evaluate PRs before Playtesting for the release.
44
# ## Documentation section is important to ensure that the documentation is updated with the changes made in the PR.
55

66
# If any of the sections is missing, the workflow will fail and block the PR from merging, prompting the developer to add those sections to the PR description.
77
# The workflow is configured to run when PR is created as well as when it is edited which also counts simple description edits.
88

9-
name: "NGO - PR Verification"
9+
name: "NGO - PR description validation"
1010

1111
on:
1212
pull_request:
@@ -17,24 +17,39 @@ on:
1717
- release/*
1818

1919
jobs:
20-
pr-verification:
20+
pr-description-validation:
2121
runs-on: ubuntu-latest
2222
steps:
2323
- name: Checkout code
24-
uses: actions/checkout@v5
24+
uses: actions/checkout@v6
2525

2626
- name: Check PR description
27-
uses: actions/github-script@v7
27+
uses: actions/github-script@v8
2828
with:
2929
script: |
3030
const pr = context.payload.pull_request;
3131
const body = pr.body || '';
32+
33+
// List of users to skip description validation
34+
// This should be automations where we don't care that much about the description format
35+
const skipUsersPrefixes = [
36+
'unity-renovate',
37+
'svc-'
38+
];
39+
40+
// If PR author is in the skip list, exit early
41+
const author = pr.user.login;
42+
console.log(`PR author: ${author}`);
43+
if (skipUsersPrefixes.some(prefix => author.startsWith(prefix))) {
44+
console.log(`Skipping PR description check for user: ${author}`);
45+
return;
46+
}
3247
3348
// List of mandatory PR sections
3449
const requiredSections = [
3550
{
36-
header: '## Backport',
37-
description: 'PR description must include a "## Backport" section. Please add this section and provide information about this PR backport to develop or develop-2.0.0 branch respectively or explain why backport is not needed.'
51+
header: '## Backports',
52+
description: 'PR description must include a "## Backports" section. Please add this section and provide information about this PR backport to develop or develop-2.0.0 branch respectively or explain why backport is not needed.'
3853
},
3954
{
4055
header: '## Testing & QA',
@@ -43,6 +58,10 @@ jobs:
4358
{
4459
header: '## Documentation',
4560
description: 'PR description must include a "## Documentation" section. Please add this section and provide information about the documentation changes made in this PR. It is important to keep the documentation up to date with the code changes.'
61+
},
62+
{
63+
header: '## Jira ticket',
64+
description: 'PR description must include a "## Jira ticket" section. Please add this section and provide a link to the Jira ticket that corresponds to this PR. General rule should be that if the PR takes you more then a day of work it should have Jira ticket. Otherwise you can always write "N/A" in this section.'
4665
}
4766
];
4867
@@ -59,4 +78,4 @@ jobs:
5978
message += '\n\nPlease add them to your PR description.';
6079
6180
core.setFailed(message);
62-
}
81+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# GitHub Actions workflow to monitor Yamato CI job state on pull requests
2+
# We are using https://cli.github.com/manual/gh_pr_checks
3+
# The aim is to ensure that conditionally triggered Yamato jobs are completed successfully before allowing merges
4+
5+
# This job will be required in branch protection rules for develop, develop-2.0.0, and release/* branches. It's only goal will be to ensure that Yamato jobs are completed successfully before allowing Pr to merge.
6+
# Note that conditional jobs will have 30s to show which is always the cas since they are showing up as soon as in distribution stage.
7+
8+
name: Yamato PR Supervisor
9+
10+
on:
11+
pull_request:
12+
types: [opened, synchronize, reopened]
13+
branches:
14+
- develop
15+
- develop-2.0.0
16+
- release/*
17+
18+
concurrency:
19+
group: pr-${{ github.event.pull_request.number }}
20+
cancel-in-progress: true
21+
22+
jobs:
23+
yamato-supervisor:
24+
runs-on: ubuntu-latest
25+
timeout-minutes: 720
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v6
29+
30+
- name: Wait and Verify Yamato Job Status
31+
env:
32+
GH_TOKEN: ${{ secrets.GH_TOKEN }}
33+
PR_NUMBER: ${{ github.event.pull_request.number }}
34+
run: |
35+
set -e
36+
37+
38+
MAX_ATTEMPTS=$((12*60))
39+
INTERVAL=60
40+
41+
sleep $INTERVAL
42+
for ((i=1;i<=MAX_ATTEMPTS;i++)); do
43+
echo "Polling PR checks (attempt $i/$MAX_ATTEMPTS)..."
44+
45+
# We want to watch for pending checks beside this check
46+
checks=$(gh pr checks $PR_NUMBER --json name,state --jq '[ .[] | select(.name != "yamato-supervisor") ]')
47+
48+
pending=$(echo "$checks" | jq '[.[] | select(.state == "PENDING")] | length')
49+
skipping=$(echo "$checks" | jq '[.[] | select(.state == "SKIPPED")] | length')
50+
passed=$(echo "$checks" | jq '[.[] | select(.state == "SUCCESS")] | length')
51+
failed=$(echo "$checks" | jq '[.[] | select(.state == "FAILURE")] | length')
52+
53+
echo "Pending checks: $pending, Skipping checks: $skipping", Passed checks: $passed, Failed checks: $failed
54+
55+
if [[ "$failed" -gt 0 ]]; then
56+
echo "A check has failed! Failing fast."
57+
exit 1
58+
fi
59+
60+
if [[ "$pending" -eq 0 ]] && [[ "$passed" -gt 0 ]]; then
61+
echo "All non-supervisor checks are completed!"
62+
exit 0
63+
fi
64+
65+
sleep $INTERVAL
66+
done
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# This workflow depend on the content of .github/pull_request_template.md file, which should contain the required sections that the script checks for
2+
# This also works in parallel with .github/workflows/pr-description-validation.yml which validates PR format
3+
# In contrast to .github/workflows/pr-description-validation.yml, this workflow is conditional and aims to ease the process of requesting QA review by automatically assigning the QA team whenever a checkbox is marked
4+
5+
# In case that the given checkboxes are marked the script will automatically add netcode-qa team as a reviewer.
6+
7+
name: 'Assign QA Reviewer'
8+
9+
on:
10+
pull_request:
11+
types: [opened, edited, synchronize, reopened]
12+
13+
jobs:
14+
assign-qa:
15+
# This job only runs if the checkbox in the PR description exist and is checked.
16+
if: >
17+
contains(github.event.pull_request.body, '- [x] `Review automated tests`') ||
18+
contains(github.event.pull_request.body, '- [x] `Execute manual tests`') ||
19+
contains(github.event.pull_request.body, '- [x] `Provide feedback about the PR`')
20+
runs-on: ubuntu-latest
21+
22+
23+
steps:
24+
25+
- name: 'Assign QA Team'
26+
uses: actions/github-script@v8
27+
with:
28+
github-token: ${{ secrets.GH_TOKEN }}
29+
script: |
30+
github.rest.pulls.requestReviewers({
31+
owner: context.repo.owner,
32+
repo: context.repo.repo,
33+
pull_number: context.issue.number,
34+
team_reviewers: ['netcode-qa']
35+
});
36+
console.log('Assigned netcode-qa for review.');

.pr_agent.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[github_app]
2+
pr_commands = []

.yamato/README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ CI related files are present inside .yamato/ folder and we can distinguish speci
99

1010
### Helper jobs
1111
- `.yamato/package-pack.yml` responsible for generating package artifacts (.tgz) required for testing and publishing.
12-
- `.yamato/project-pack.yml` responsible for generating package artifacts (.tgz) required for testing and publishing. This packs all packages of a given project.
1312
- `.yamato/_run-all.yml` responsible for grouping tests into groups for easier management (for example "all console tests").
1413
- `.yamato/_triggers.yml` responsible for defining triggers (PR, nightly, weekly etc.) and defining which tests to run.
1514
- `disable-burst-if-requested.py` responsible for helping to disable burst if needed.
@@ -70,11 +69,11 @@ Currently, the CI implementation supports the following platforms:
7069
- Ubuntu
7170
- macOS
7271
4. Unity Editor Versions
73-
- Supports NGOv1.X (2021.3+ editors)
72+
- Supports NGOv1.X (2022.3+ editors)
7473
5. Architectures
7574
- x64
7675
- ARM64 (This is present for consoles/mobiles but will be extended. More information is present in specific standalone test files)
7776

7877
## Design Considerations
7978
In theory, we could manually write jobs for every configuration. However, this approach would be more error-prone, especially when modifications or fixes are needed, as it would require keeping track of all configurations.
80-
The downside of our current approach is that it can sometimes impact readability due to the use of nested if and for statements.
79+
The downside of our current approach is that it can sometimes impact readability due to the use of nested if and for statements.

0 commit comments

Comments
 (0)