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

Add PR number badge for internal builds #16735

Merged
merged 25 commits into from
Apr 20, 2023

Conversation

staszekscp
Copy link
Contributor

@staszekscp staszekscp commented Mar 30, 2023

Details

This PR customises the environmental badge for internal builds. The internal builds are going to run on staging environment, but there will be a badge with information from which PR the app was built.

The PR doesn't include screenshots, since a real internal builds would have to be checked to test it properly.

@AndrewGable Could you run the testBuild workflow against this PR to see if everything is fine?

Fixed Issues

$ #13993

Tests

  • Verify that no errors appear in the JS console
  • Check if the correct badge is visible near "Chats", when building the app directly from a PR

Offline tests

QA Steps

  • Verify that no errors appear in the JS console
  • On Staging "Stg" badge should be visible, on production no badge expected

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android / native
    • Android / Chrome
    • iOS / native
    • iOS / Safari
    • MacOS / Chrome / Safari
    • MacOS / Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web image
Mobile Web - Chrome

IMG_2056

Mobile Web - Safari

IMG_2057

Desktop image
iOS

IMG_2055

Android

rn_image_picker_lib_temp_f95cde4c-9398-4433-b764-3b159164fadd

@staszekscp staszekscp requested a review from a team as a code owner March 30, 2023 08:35
@melvin-bot melvin-bot bot requested review from francoisl and removed request for a team March 30, 2023 08:36
@MelvinBot
Copy link

@francoisl Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@AndrewGable
Copy link
Contributor

@@ -71,6 +71,9 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha || needs.getBranchRef.outputs.REF }}

- name: Add PULL_REQUEST_NUMBER to .env.staging file
Copy link
Contributor

Choose a reason for hiding this comment

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

I can appreciate the simplicity of this but I wonder if creating a .env.adhoc is more clear?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I took that into consideration, but quoting Rory from this discussion :)

we could create a separate environment file for ad-hoc builds. The downside is that we'd be introducing a new environment file that we have to maintain, and that environment file would be different from the staging environment. In general I think we want these ad-hoc builds to be as similar to staging builds as possible.

Copy link
Contributor

Choose a reason for hiding this comment

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

@roryabraham - Curious for your thoughts here now that we have a PR up. My sense is adhoc is not a ton to maintain and it's more explicit as we now have two or three different terms to describe "adhoc" "pull request" "internal testing", etc.

@staszekscp
Copy link
Contributor Author

@AndrewGable could you re-run the build workflow? The previous one used the workflow from main branch instead of internal-build-pr-badge, so it didn't have the necessary changes :) The correct workflow branch may be chosen while running the action :)

image

@AndrewGable
Copy link
Contributor

I do not see your branch, I'm thinking it might be missing because it's a fork?

Screenshot 2023-03-30 at 3 02 39 PM

@AndrewGable
Copy link
Contributor

I can probably checkout the branch, then push my own version?

@staszekscp
Copy link
Contributor Author

Yep, I think that would be the easiest solution!

@AndrewGable
Copy link
Contributor

Ran here https://github.com/Expensify/App/actions/runs/4566142454

Used internal-build-pr-badge and 16735

@staszekscp
Copy link
Contributor Author

@AndrewGable There was a tiny bug I haven't spotted before. The .env.staging file was not edited in the previous build, because double quotes in echo command ended in the wrong place... Could you pull the newest changes and run the workflow again? Sorry for that, and thanks for the help!

@staszekscp
Copy link
Contributor Author

Hey @AndrewGable! Could you rerun the workflow to see if everything is ok? :)

@AndrewGable
Copy link
Contributor

Yes, will do. Updated internal-build-pr-badge branch and will re-run now.

@AndrewGable
Copy link
Contributor

@staszekscp
Copy link
Contributor Author

Hi @AndrewGable! Thanks for running the workflow, it seems that everything works as expected :)

@AndrewGable
Copy link
Contributor

From the QR code I still see the stg badge when logging in:

IMG_E01FE9C6313C-1

@AndrewGable
Copy link
Contributor

Also the "About" page from settings still shows the non adhoc version

IMG_AAC2EB098BB5-1

@staszekscp
Copy link
Contributor Author

@AndrewGable, sorry about the About page, I didn't know it has to be changed there too. It won't be a problem, I'll fix it tomorrow. If it comes to the badge on the screen with logging in I can change it. I just want to inform that for now it is an svg, so I'll have to modify this element a bit to use the EnvironmentBadge component instead. Although if you'd like to modify changes the SplashScreen too, the implementation may be more complex :)

@AndrewGable
Copy link
Contributor

I think no splash screen is fine for now, I can get you a replacement SVG for AdHoc that looks similar to the Staging one.

@staszekscp
Copy link
Contributor Author

@AndrewGable That would be great!

@AndrewGable
Copy link
Contributor

@Expensify/design or @ADeWitt - Would it be possible to get https://github.com/Expensify/App/blob/main/assets/images/new-expensify-dev.svg in another variant? Ideally it would say "AdHoc", if that does not fit, maybe we could do "PR"? The "pill" color could be a different color if we have another brand color to use, otherwise we can use the "Dev" color.

@shawnborton
Copy link
Contributor

Do we need that for all of the icon possibilities? Like the desktop icon as well?

@Julesssss
Copy link
Contributor

Maybe we can simplify the CI input labels? Even with context I've messed up twice now.

New run: https://github.com/Expensify/App/actions/runs/4734387668

@staszekscp
Copy link
Contributor Author

Hi @Julesssss, thanks for the run! I've just merged the newest main, and the desktop app works, so hopefully it can be finally merged :) Fingers crossed!

@Julesssss
Copy link
Contributor

Julesssss commented Apr 19, 2023

I'm just a bit confused why the Android AdHoc build doesn't contain the purple pill like the other platforms. I can only see the PR info on the settings page 😕

I used this link, from here is that correct?

Screenshot_20230419-123415

@staszekscp
Copy link
Contributor Author

The last commit should fix the issue, hopefully it's the last one :)

@Julesssss Julesssss mentioned this pull request Apr 19, 2023
@Julesssss
Copy link
Contributor

Thanks, triggered another build here

@staszekscp
Copy link
Contributor Author

Ok, android is already downloadable, and the fix worked. :) I've probably installed the previous version last time, and I haven't spotted the difference :/

@OSBotify
Copy link
Contributor

@staszekscp
Copy link
Contributor Author

@Julesssss all of them seem to be working fine now 😄

@Julesssss
Copy link
Contributor

Julesssss commented Apr 19, 2023

Okay, thanks. Confirmed I see the pill now.

I've updated the checklist with all platforms except iOS mWeb -- which I'm struggling with for some reason. Both in Safari and Chrome:

IMG_0130 IMG_0131

@staszekscp
Copy link
Contributor Author

That is strange, on my iPhone everything works just fine... I've just double checked it to make sure. Could you try a bit later?

@staszekscp
Copy link
Contributor Author

One screenshot is from Safari, second from Chrome

IMG_2101
IMG_2102

@Julesssss
Copy link
Contributor

Julesssss commented Apr 19, 2023

Yeah, it's weird. It works fine for me still on Android. Anyway, good news... I was able to verify on a simulator, so I think we're good to go.

@MelvinBot
Copy link

npm has a package.json file and a package-lock.json file. It seems you updated one without the other, which is usually a sign of a mistake. If you are updating a package make sure that you update the version in package.json then run npm install

@MelvinBot
Copy link

Hey, I noticed you changed some webpack configuration files. This can break production builds. Did you remember to run a production build locally to verify they still work?

@Julesssss
Copy link
Contributor

@AndrewGable maybe you wanna review again

@Julesssss Julesssss merged commit 1cd304c into Expensify:main Apr 20, 2023
@OSBotify
Copy link
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@mvtglobally
Copy link

@staszekscp @AndrewGable We have no easy way to confirm variety of build for this PR. Do you mind QA-ing it internally?

@AndrewGable
Copy link
Contributor

Yes, you can mark it off. We tested the steps for this PR before merging.

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by https://github.com/Julesssss in version: 1.3.3-0 🚀

platform result
🤖 android 🤖 success ✅
🖥 desktop 🖥 success ✅
🍎 iOS 🍎 success ✅
🕸 web 🕸 success ✅

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/mountiny in version: 1.3.3-2 🚀

platform result
🤖 android 🤖 success ✅
🖥 desktop 🖥 success ✅
🍎 iOS 🍎 success ✅
🕸 web 🕸 success ✅

@kowczarz kowczarz mentioned this pull request Jun 30, 2023
57 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants