angularfire icon indicating copy to clipboard operation
angularfire copied to clipboard

Deploying to multiple firebase sites using angularFire and ng deploy

Open h11a opened this issue 2 years ago • 12 comments

Versions: "@angular/cli": "^14.2.10", "@angular/cdk": "^14.2.1", "@angular/fire": "^7.4.1", "firebase": "^9.6.8",

I am having issues with setting up config to allow deploying to a dev/prod sites on Firebase hosting. The sites on firebase are in the same firebase project

I have followed this guide https://github.com/angular/angularfire/blob/master/docs/deploy/getting-started.md

but I am receiving the same issue as these old unanswered github issues https://github.com/angular/angularfire/issues/3077

https://github.com/angular/angularfire/issues/3076

Here is my setup

  1. angular.json
   "deploy": {
                    "builder": "@angular/fire:deploy",
                    "options": {
                        "firebaseProject": "<<MY_FIREBASE_PROJECT_ID>>",
                        "siteTarget": "devTarget",
                        "buildTarget": "<<MY_ANGULAR_PROJECT>>:build:development"
                    },
                    "configurations": {
                        "dev": {
                            "firebaseProject": "<<MY_FIREBASE_PROJECT_ID>>",
                            "siteTarget": "devTarget",
                            "buildTarget": "<<MY_ANGULAR_PROJECT>>:build:development"
                        },
                        "prod": {
                            "firebaseProject": "<<MY_FIREBASE_PROJECT_ID>>",
                            "siteTarget": "prodTarget",
                            "buildTarget": "<<MY_ANGULAR_PROJECT>>:build:development"
                        }
                    }
                }
            }
  1. firebase.json
{
    "hosting": [
        {
            "target": "devTarget",
            "public": "dist",
            "ignore": [
                "**/.*"
            ]
        },
        {
            "target": "prodTarget",
            "public": "dist",
            "ignore": [
                "**/.*"
            ]
        }
    ]
}
  1. .firebaserc
{
  "projects": {
    "default": "<<MY_FIREBASE_PROJECT_ID>>"
  },
  "targets": {
    "<<MY_FIREBASE_PROJECT_ID>>": {
      "hosting": {
        "devTarget": [
          "<<DEV_SITE_ID>>"
        ],
        "prodTarget": [
          "<<PROD_SITE_ID>>"
        ]
      }
    },
  "etags": {}
}

Should this work if i run ng deploy <<MY_ANGULAR_PROJECT>> --configuration='dev'?

I receive the following error from node_modules\@angular\fire\schematics\deploy\builder.js:36:15

An unhandled exception occurred: The Firebase Hosting Site specified by your angular.json or .firebaserc is in conflict

h11a avatar Jan 20 '23 15:01 h11a

This issue does not seem to follow the issue template. Make sure you provide all the required information.

google-oss-bot avatar Jan 20 '23 15:01 google-oss-bot

There's ambiguous code which doesn't allow multiple hosts it seems 😠

image

liesahead avatar Apr 06 '23 08:04 liesahead

@davideast , could you clarify if the development team is planning to check the issues?

Because currently from what I see the relevant ones deserve no attention and it's easier to work with plain firebase as, for example, it's not possible to set up multiple hosts with angular fire.

liesahead avatar Apr 06 '23 08:04 liesahead

@liesahead We are working on getting AngularFire up to date with TypeScript 5 and the latest Firebase SDK. Once that is complete we'll focus on this issue

davideast avatar Jun 26 '23 19:06 davideast

@davideast , great, thanks!

liesahead avatar Jun 27 '23 08:06 liesahead

Any progress or updates on this? I have the same issue.

AlmaniaM avatar Dec 27 '23 04:12 AlmaniaM

any update on this ?

JoanSernaLeiton avatar Jan 15 '24 01:01 JoanSernaLeiton

Any update?

pdela avatar Mar 07 '24 14:03 pdela

I found out what's wrong: In angularfire/schematics/deploy/builder.ts the function below receives the angular project name, not the firebase target alias:

const [defaultFirebaseProject, defulatFirebaseHostingSite] = getFirebaseProjectNameFromFs( context.workspaceRoot, context.target.project );

I managed to have it working by manually adding this to .firebaserc:

"targets": { [FIREBASE_PROJ_ID]: { "hosting": { ..... [ANGULAR_PROJECT_NAME]: [ "HOSTING_SITE_ID" ] } } },

Of course this means to manually change the hosting site id everytime I want to switch from the "staging" site to the "production" site and viceversa.

PS Unfortunately even this doesn't solve my problem as i'm trying to use firebase experimental webframework support for ssr. While using ng deploy it seems the site got built once, but then firebase-tools kick in to deploy and, due to the webframework support, the site gets built again this time always using the production configuration, even if the default configuration in angular.json is set to staging. I'll post an issue with firebase-tools.

pdela avatar Mar 07 '24 17:03 pdela

Having the same problem

alejandroquadri avatar Mar 15 '24 15:03 alejandroquadri

Having the same problem

The issue persists, but managed to do it by using firebase directly (no more ng deploy) using the FIREBASE_FRAMEWORKS_BUILD_TARGET variable. here my npm scripts: "b-d": "firebase deploy --only hosting:prod-web-target", "b-d-test": "set FIREBASE_FRAMEWORKS_BUILD_TARGET=staging&& firebase deploy --only hosting:test-web-target",

Notice no space between "staging&&"

Where "staging" is my build option in angular.json.

Hope this helps.

pdela avatar Mar 15 '24 15:03 pdela

thanks @pdela! It works!

The correct script on a mac would be: "b-d-test": "FIREBASE_FRAMEWORKS_BUILD_TARGET='staging' firebase deploy --only hosting:test-web-target",

alejandroquadri avatar Mar 15 '24 17:03 alejandroquadri