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

Amplify does not recognize function created in a separate git branch #8090

Open
cfbo opened this issue Sep 3, 2021 · 4 comments
Open

Amplify does not recognize function created in a separate git branch #8090

cfbo opened this issue Sep 3, 2021 · 4 comments
Labels
bug Something isn't working functions Issues tied to the functions category multienv Issues tied to multiple environment feature in the CLI ops-multienv Operational theme: multi-environment p2

Comments

@cfbo
Copy link

cfbo commented Sep 3, 2021

Which Category is your question related to?
Function

Amplify CLI Version
5.3.1

What AWS Services are you utilizing?
Api, function, storage, auth,

Provide additional details e.g. code snippets

Help needed with an amplify push issue, please! 🙏

  • A colleague and I were working on two different envs (envA and envB), in separate git branches (br1 and br2).
  • We both added (different) functions in each env (let's called function funX and funY). We both performed an amplify push in each one env and did git pushes while progressing work.
  • At some point we wanted to merge our developments because we know there would have been issues in amplify
  • Basically I have merged his branch in my branch, locally. There were git conflicts, in particular in backend-config.json. Having both added functions, the conflict was in the function section of course.
  • We manually merged the conflicts, very carefully, i.e. I am 100% that file is syntactically correct and both functions are correctly declared.
  • I then run an amplify push, which worked successfully.
  • However the amplify status does not list my colleague's function (funB)... of course it was available in the backend-config.json and the related folder under amplify/function was there. Therefore my env (envA) did not build that lambda in the cloud.. and of course this causes errors (the lambda is invoked by the react frontend but it's not there)

I don't know how to get out from that situation!
What is the correct procedure to handle such scenario??
Should I have used an amplify command to merge envB in envA? Shouldn't be enough the git merge and then a push?

Some more attempts on that:

  • Given that the function was missing in my env, I then tried to an amplify add function to manually create the missing function (funY)... I noticed that after this, funY was added to my env (envA) in the team-provider-info.json. Of course the folder for funY was already in my amplify folder and amplify kept that.. it did just override some files (e.g. adding basic permissions for that function and removing the permission my colleague had assigned to it).. so I then inspected the diff in git and made sure to (very carefully) discard some of the changes made by the amplify add the original settings from my colleague. However performing another amplify push at this point, I got an error...
@cfbo cfbo added the question General question label Sep 3, 2021
@cfbo cfbo closed this as completed Sep 3, 2021
@cfbo cfbo reopened this Sep 3, 2021
@cfbo
Copy link
Author

cfbo commented Sep 3, 2021

I found a solution, but I still would like someone to help me understand if this is okay and also tell me what are best practices to avoid finding ourselves in this kind of situation.

When I merged the branch with all the changes (including the result of the merge) into a test branch which has an automated build associated to it, it worked, i.e. it created the missing function (funB).

Is there any reason why the amplify cloud build worked and the local amplify push via CLI didn't?

@josefaidt josefaidt added the pending-triage Issue is pending triage label Sep 3, 2021
@josefaidt josefaidt self-assigned this Sep 3, 2021
@danielleadams danielleadams added the multienv Issues tied to multiple environment feature in the CLI label Sep 7, 2021
@josefaidt
Copy link
Contributor

Hey @cfbo 👋 apologies for the delay, but thank you for taking the time to file this and include detailed reproduction steps! I was able to reproduce by creating a similar setup with two separate environments, in two separate local directories, both connected to separate git branches corresponding to their envs. In each branch I created a function, pushed to Amplify, then pushed to git. In the "main" branch & env I ran a git merge to merge in the changes performed in the other branch, and received conflicts as you mentioned.

These conflicts are described as the following:

  • conflicts to add each environment and categories into team-provider-info.json
  • conflicts to add each function to backend-config.json

Since neither Amplify env existed in the other, this is where those conflicts arise. Though unfortunately I experienced the same issue where now the new function does not show in the list of resources for the current env, I was able to run amplify env checkout <current-environment-name>, which initialized this category in the current environment. Running this command populates the resource metadata in amplify-meta.json which is used to gather resource information when running commands like amplify status. This approach is similar to how we enable custom resources.

Marking this as a feature request to the team to improve the multi-environment flow when merging content from a separate branch with new, alike resources.

@josefaidt josefaidt added feature-request Request a new feature and removed question General question pending-triage Issue is pending triage labels Sep 13, 2021
@josefaidt josefaidt removed their assignment Sep 13, 2021
@cfbo
Copy link
Author

cfbo commented Sep 14, 2021

@josefaidt Thanks for coming back to me and taking the time to reproduce the scenario.

If understood correctly, a workaround is the following: when merging branch 2 into branch 1 and while amplify is on envA, after resolving the git conflicts we should also run an amplify env checkout envB, is that correct?

I will add something that is sort of related to merging into new branches/env, but should probably go in a separate ticket
Whenever I do the merge, if the new function added in the branch being merges is using the SSM to store secrets, upon amplify push a block of comments will be added again, even if one exists. This keeps going if one has quite a few envs.
The current approach I am using is to discard these changes (when they are just a duplicate of a comment that is already there)
image
I would think this is an issue. Any feedback on this?

@josefaidt
Copy link
Contributor

If understood correctly, a workaround is the following: when merging branch 2 into branch 1 and while amplify is on envA, after resolving the git conflicts we should also run an amplify env checkout envB, is that correct?

Apologies for the confusion, after resolving git conflicts we want to run checkout on the current env. In this case while we are on envA we'll want to run amplify env checkout envA

if the new function added in the branch being merges is using the SSM to store secrets, upon amplify push a block of comments will be added again, even if one exists

Yes I've noticed this recently as well, may you open a separate issue? I'll add my notes to that issue as well, as I've noticed it will add that block when updating a function if it has secrets enabled.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working functions Issues tied to the functions category multienv Issues tied to multiple environment feature in the CLI ops-multienv Operational theme: multi-environment p2
Projects
None yet
Development

No branches or pull requests

3 participants