CDI-558 Standardize the Meta-Data builders API (BeanBuilder, etc...)

CDI-558 Standardize the Meta-Data builders API (BeanBuilder, etc...)

Currently, this PR only contains the SPI/API part. I'd like to gather feedback before adding content to the spec.

It seems to me ok...besides the naming of "Helper" and "HelperProvider".

I think we should add to all the builders that they are not supposed to be thread safe.
The getter methods for the builders should also return a NEW builder instance for every invocation.

+1 for non-thread-safe builders
+1 for explicit note about methods returning new instances
I think the builders should be reusable though.
We could also add convenient methods to simplify the usage - see also https://github.com/weld/api/blob/master/weld/src/main/java/org/jboss/weld/experimental/ExperimentalAfterBeanDiscovery.java#L34

@mkouba added mention of non thread safe and new instances
I'm not convinced by the addBean() method returning a BeanBuilder and building / registering it automatically: it breaks the builder pattern IMO.

it breaks the builder pattern IMO.

No problem. On the other hand, the build() contract is clear now and so I don't see how this could break the pattern. The point was users will mostly add the result of the builder.
event.addBean().addType(Configuration.class).producing(new Configuration(1));
// VS
event.addBean(event.beanBuilder().addType(Configuration.class).producing(new Configuration(1)).build());

added mention of non thread safe and new instances

Mark's comment was about new instances of builders (e.g. event.beanBuilder()), not about the results of build() methods.

event.addBean().addType(Configuration.class).producing(new Configuration(1));

/>/ VS

event.addBean(event.beanBuilder().addType(Configuration.class).producing(new >Configuration(1)).build());

I like the DSL style but what happens if user write?
event.addBean().addType(Configuration.class).producing(new Configuration(1)).build();

I like the DSL style but what happens if user write?

I'm not sure what the Weld prototype does. But we could disallow it and possibly throw some exception.

Ok, I'll add it.

I think the name of the method javax.enterprise.inject.spi.builder.Builders#annotatedType() could be confusing. It's true that annotatedTypeBuilder is longer but perhaps little bit more clear?

@tremes yes I hesitated on the name. I chose this one for the following reasons

Keep the spirit introduced in ProcessAnnotatedType#setAnnotatedType() (vs ProcessAnnotatedType#setAnnotatedTypeWithConfigurator()
Shorter
As it will be used with Builders.annotatedType() I found a bit heavy to have Builders.annotatedTypeBuilders() and confusion limiting to have the Builders mention at the begining of the call

Now we can decide to be more explicit. It's a matter of taste ;)

I have still questions regarding this new APis. you'll have probably more ;):
Configurators contract
What happen if I call AfterBeanDiscovery#setBean() and do nothing with the returned BeanConfigurator. I think the container should raised an exception.
But the more general question is "what would be the minimum to do to configure a AnnotatedType, Bean, BeanAttribute, InjectionPoint and ObserverMethod configurator".
Is this contract should be documented on configurators' side or on the method returning them in lifecycle events?
Same question for the builders at the time build() method is called.
Using Builders outside container lifecycle events
While it could be interesting to build a Bean from standard java code or unrelated CDI code (e.g. build the bean from an AnnotatedType in ProcessAnnotatedType to see what will be created from this type), I don't measure the complexity or possible confusion with such a feature.
My feeling here is we should allow the same feature level someone could achieve today with its own implementation of Bean, but I may have overlooked some difficulty regarding the generic custom bean the implementations will have to provide (BTW should it be mentioned somewhere or is it implied when I write that container must provide implementation for Configurators / builder)
Interest of Builder interface
Builder interface transform configurators in true builders, but is it interesting to have this interface alone vs adding the build() method to every builder.
Is the allowed polymorphic approach or defining it as functional interface could be interesting? In both case I'll have to make it publicly visible (right now it is restricted to the package visibility)

@antoinesd Although I quite like the idea of configurators there's one major issue with usability - once you invoke a configurator method on a builder instance you will not be able to call build() method anymore because you will get a configurator type. You would have to cast the result:
((AnnotatedTypeBuilder)Builders.annotatedType().removeFromType(Foo.class)).build()

Or am I missing something?
Also I'm not so sure we will be always able to initialize all builders outside of container lifecycle event notifications. Let me check again...

@antoinesd Although I quite like the idea of configurators there's one major issue with usability - once you invoke a configurator method on a builder instance you will not be able to call build() method anymore because you will get a configurator type. You would have to cast the result:
((AnnotatedTypeBuilder)Builders.annotatedType().removeFromType(Foo.class)).build()

Or am I missing something?

@mkouba not you're not missing something. It's me. I'll probably have to do the same trick that I did for  BeanAttributesConfigurator and BeanConfigurator. Or if you have a better idea...

Also I'm not so sure we will be always able to initialize all builders outside of container lifecycle event notifications. Let me check again...

Yes that's one of my open questions.

Push a new version to solve problems of type raised by @mkouba and raw type issues.

Looking at the PR, there is one thing I wonder about. Given the following sample:
public <T> void addContext(@Observes AfterBeanDiscovery event) {
        event.addObserverMethod().async(false).priority(1000).addQualifier(...). // etc. set tup the method
        event.addObserverMethod().async(true).priority(1).addQualifier(...). // call again with different values
    }

My questions are:

You cannot call build() here and from the PR I understood it should be built once the observer method invocation is over. Is that correct? E.g. you needn't invoke it yourself.
If so, what happens if you call the Configurator (in this code sample observer method conf.) twice within the method? Does it apply the latter one? Both?

@manovotn In your @Observes AfterBeanDiscovery event example, I believe each event.addObserverMethod() invocation returns a new instance of configurator and both observer methods should be added. ProcessAnnotatedType.setAnnotatedType() and similar methods are more problematic. I would say the last configurator will be used. Others will be ignored.

@mkouba good point. I just pasted and edited the first observer I came across and didn't realize that.
I updated my previous comment to work with @Observes ProcessAnnotatedType event instead.

@manovotn, @mkouba : my idea is when you are working on a set* method (like setAnnotatedType in ProcessAnnotatedType) you always get the same configurator since only one is meaningful. When you are working on add* method you get a new one each time.
Configurator are not reusable since the build process is not included while builder are reusable.
I agree that should be put in clearer way.

This pull request gets better and better. However, we went through the API this morning and found some inconsistencies and places which deserve attention ;-).
Lifecycle events
I think that ProcessAnnotatedType.setAnnotatedType(), ProcessBeanAttributes.setBeanAttributes(), ProcessInjectionPoint.setInjectionPoint() and ProcessObserverMethod.setObserverMethod() without params should be renamed to configureX() and the returned configurators should be initialized with the event payload, as the usual use case is to modify/wrap the payload.
Reusability
I think we should remove all the Builders methods which return raw types. It does not make sense to make builders completely reusable. Maybe we should only allow the read methods to accept subtypes.
AnnotatedTypeConfigurator

read methods should be probably parameterized with <U extends T>, similarly to BeanConfigurator.read(AnnotatedType<U>)
removeFromType() variant which accepts Annotation is missing - currently it's only possible to remove all the annotations of the given type, e.g. it's not possible to only remove @Transactional(TxType.REQUIRED)

InjectionPointConfigurator

delegate() and transientField() seem redundant to me

BeanConfigurator

all "create callback" methods must return BeanConfigurator<U> (not <T>)

ObserverMethodConfigurator

addStereotype() methods should be removed - stereotypes are only intended for beans
read(ObserverMethod<?> method) should be read(ObserverMethod<T> method)
async() method seems redundant to me
we should add notify() variant that accepts EventMetadata and Instance<Object>

@mkouba I agree with all these points. Doing the modifications.

One more thing regarding reusability.
You removed methods which return raw type from Builders.java.
But the very same issue remains in BuildersProvider.java. Shouldn't we remove those as well?

Yes @manovotn, you're right thx.

While writing new assertions in TCK I realized that InjectionPointConfigurator provides methods for handling stereotypes. It doesn't make sense.

Cut and paste error. I'll remove them.
Le mar. 22 mars 2016 à 13:28, Tomas Remes<EMAIL_ADDRESS>a
écrit :

While writing new assertions in TCK I realized that
InjectionPointConfigurator provides methods for handling stereotypes. It
doesn't make sense.
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
https://github.com/cdi-spec/cdi/pull/270#issuecomment-199787312

It's not clear whether the result of BeanBuilder.build()/BeanConfigurator.configure() is passivation capable or not. In Weld the resulting bean always implements PassivationCapable and it's possible to override the default id - see also https://github.com/weld/api/blob/master/weld/src/main/java/org/jboss/weld/experimental/BeanBuilder.java#L255.

@antoinesd @tremes @manovotn I've tried to design a new API for AnnotatedTypeConfigurator:
https://github.com/mkouba/cdi/tree/next-atc-api
Few examples can be found here:
https://github.com/mkouba/cdi/blob/next-atc-api/api/src/main/java/javax/enterprise/inject/spi/builder/AnnnotatedConfiguratorsTest.java
Unlike the original version this API  allows the user to iterate/filter the existing methods/fields/constructor/params. The resulting code might sometimes look verbose but I find the API more clear and powerful.

@mkouba your proposal is very interesting. ATC is not usable in its current state unles if we make it a raw type :-).

@antoinesd The new ATC proposal is ready. I've added some javadoc, removed "findFirst" methods, added corresponding getAnnotated() to each AT configurator and updated the examples (AnnnotatedConfiguratorsTest).

This PR became too complicated (in its history). Code will be proposed again in a new PR soon


Cannot upload y[BUG]

When i try to reproduce the usecase with the OpenAPI flow :
https://docs.flowiseai.com/use-cases/interacting-with-api
1/ I cannot upload the Yaml file with the upload button.
2/ When I try a link i get the error 'Unable to parse from source'
I therefore cannot reproduce the given uses case

I just tested it, you can definitely upload:

here's the chatflow: test.json


Source file name should match the header file name

file name pasticity.c should be placticity.c

Resolved. Thanks for notifying. Much appreciated.


Prerequists

Type of issue
Missing information
Description
Add the line that,
Feature 'collection expressions' is not available in C# 7.3. Please use language version 12.0 or greater. LINQ
Page URL
https://learn.microsoft.com/en-us/dotnet/csharp/linq/store-the-results-of-a-query-in-memory
Content source URL
https://github.com/dotnet/docs/blob/main/docs/csharp/linq/store-the-results-of-a-query-in-memory.md
Document Version Independent Id
250d1850-1c0b-dc6c-44c1-5576ebadc8e3
Article author
@BillWagner
Metadata

ID: f8951007-e0ed-32c4-e334-86ff154a518f
Service: dotnet-csharp
Sub-service: csharp-linq

You can rewrite this as ...
List<int> numbers = new List<int>() { 1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
What you're seeing there is a collection expression which got introduced in .NET 8 with C# language version 12. If you're running C#7.3, I guess we're talking about a .NET Standard 2.0 project. Reference - C# Language Versions
You don't need to update the project to .NET 8 - if you're using .NET Standard 2.0 you need .NET Framework compatibility. However, simply having the .NET 8 SDKs  you just need to have the .NET SDKs installed will allow you to target the latest language version - simply edit your .csproj file
<PropertyGroup>   <TargetFramework>netstandard2.0</TargetFramework> 	<LangVersion>latest</LangVersion> </PropertyGroup>
Whether it is needed to call this out on the page, I'll leave to Bill

cc @eiriktsarpalis

I've been debating if we should update the doc to point out that collection expressions are in C# 12.
On one hand, collection expressions are one of the most useful C# 12 features. We want .NET developers to see examples that use them. Ideally, that can drive more adoption of the latest versions.
On the other hand, yes, it means samples that use them don't work on older versions.
I've been leaving them in place, without stating that they are a C# 12 feature. I've had some feedback, but not much.
I'm adding the discussion label to get other opinions.


i18n

What about translations - are there any planned? Could I start adding a German one? (using ugettext of course)

Languages other than German should probably have individual issues.


.sinopia-db.json update with npm install

.sinopia-db.json file is only updated with npm publish. "npm install" puts the packages from the global npm registry (if not exist) but .sinopia-db.json file is not updated.
Also, is there a way to fill .sinopia-db.json file from the existing storage folder content. That will really help :)

Hi @serdaryesilmurat
.sinopia-db.json  only store private packages. It's intended in that way. Why would you like to have them on .sinopia-db.json  ?

Because verdaccio server is used as private npm server that also serves 3rd party npm modules besides our private modules. 3rd party modules are installed to another verdaccio instance with npm registry is set as uplink and then via file sync, manually files in that storage are copied to the internal verdaccio that has no internet connection. We develop our private modules using that internal verdaccio. Basically, we want to see those 3rd party npm packages on verdaccio web ui. There are many different teams using that repo. It is helpful to see whether a package (with a specific version) is served through the web ui. If I write each package name to json file (via a script probably), I can see them in web ui. I thought it would add value to verdaccio to add this feature as well. It would be shame to limit verdaccio for only serving private packages IMHO. Just a suggestion :)

we want to see those 3rd party npm packages on verdaccio web ui. There are many different teams using that repo. It is helpful to see whether a package (with a specific version) is served through the web ui.

I see, your request is legitimate and I agree with you, but we have a running task for it already, see here https://github.com/verdaccio/verdaccio/issues/706
We are working on it, not likely included on 4.0.0 but in the first minor releases will be. The main problem is we need to find a way to paginate packages, right now all are displayed in once shooting, not the best idea if we have to display thousands. Please let's follow up in the ticket above.


Change convention of setter to mutateState instead of setState

In order to help reading code that mixes useState and useMutative, it might be helpful to change the convention to mutateX. If this is a welcome change, I can submit a pull request that changes the docs and usage in code to this new convention.
Example:
const [enabled, setEnabled] = useState(true);
const [fancyState, mutateFancyState] = useMutative({...});

Yes, just the docs and examples.
Still new with mutative style hooks. Most of my code is expectedly on useState. I find useState sufficient and in fact preferrable over useMutative for fine grained states storing simple primitives — a boolean, a string or just a number, or even a js object but modified as a whole.
For complex states though, this is where i find useMutative really shines.
That said, as a reader of the code if I encounter a variable named “setFoo”, just reading the name alone doesn’t tell me how to invoke it. Am i supposed to pass a function that returns the entire state (which is expected if it came from useState), or am I supposed to pass a function that modifies the param (which is expected if it came from useMutative). Sure, i can trace back the code which hook was used or i can force my editor to reveal the typescript type — but i’d rather be able to tell quickly from the variable name. As such, on my own code, i use the “mutateFoo” convention to quickly tell it’s from useMutative.

Perhaps you also know that useMutative() also supports updating primitives. However, there is some truth in what you say, pull request welcome.


phonegap serve in 6.4.2 crash

PhoneGap CLI, node & npm versions
phonegap-cli: 6.4.2
node: 6.9.1
npm: 4.0.1
Expected Behaviour
phonegap serve in 6.0.1 was working fine:
[phonegap] starting app server...
[phonegap] listening on <IP_ADDRESS>:3200
[phonegap]
[phonegap] ctrl-c to stop the server
[phonegap]

Actual Behaviour
Actual version 6.4.2 crashes
Steps to Reproduce
I've added a hook that copies all files from src/ to www/ just before_prepare and each time a file in src/ is changed: https://github.com/appfeel/ionic-plugin-build/blob/master/scripts/beforePrepare.js
phonegap serve
The hook runs and does not return until the files have been copied, so the copy of the files is done before phonegap serve starts serving. The question here is that phonegap serve seems to be detecting lots of changes after preparing. Are the events delayed or somenthing like this?
Sample Code that illustrates the problem
Error messages
[phonegap] starting app server...
[phonegap] listening on <IP_ADDRESS>:3200
[phonegap]
[phonegap] ctrl-c to stop the server
[phonegap]
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/app.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/config.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/index.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/manifest.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/service-worker.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/mock/data.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/mock/renamer.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-ui-router/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-ui-router/CHANGELOG.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-ui-router/CONTRIBUTING.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-ui-router/LICENSE
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-ui-router/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-unsafe/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-unsafe/LICENSE
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-unsafe/package.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/angular-unsafe/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/asmcrypto.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/asmcrypto.js.map
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/LICENSE
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/components-font-awesome/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/components-font-awesome/package.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/components-font-awesome/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/CHANGELOG.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/config.xml
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/CORDOVA.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/index.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/KNOWN_ISSUES.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/LICENSE.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/package.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/package.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/imgcache.js/TODO.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/CHANGELOG.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/config.xml
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/Copyright.txt
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/LICENSE
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/package.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/webpack.config.dist.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/webpack.config.dist.min.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-native-transitions/webpack.config.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-ratings/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-ratings/gulpfile.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-ratings/ionic.project
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-ratings/LICENSE.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-ratings/package.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic-ratings/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/bower.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/README.md
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/errors.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/exports.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/globals.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/origin.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/utils.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_action-sheet.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_animations.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_backdrop.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_badge.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_bar.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_button-bar.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_button.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_checkbox.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_form.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_grid.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_items.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_list.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_loading.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_menu.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_mixins.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_modal.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_platform.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_popover.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_popup.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_progress.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_radio.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_range.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_refresher.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_reset.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_scaffolding.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_select.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_slide-box.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_slides.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_spinner.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_tabs.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_toggle.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_transitions.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_type.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_util.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/_variables.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/ionic.scss
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/ionic/scss/tsconfig.json
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/aes/aes.asm.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/aes/aes.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/aes/exports.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/src/hash/hash.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/push/push.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/rate/rate.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/sidemenu/sidemenu.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/user/user.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/css/style.css
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/fonts/AdobeFnt16.lst
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/img/agenda.svg
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/mock/pictures/00da5a04-2bce-495c-bd0f-c0533f351704_thumb.jpg
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/sounds/pull-down-1.mp3
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/basicauth/basicauth.svc.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/login/login.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/main/main.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/picture/picture.html
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/pictures/camera.svc.js
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: ENFILE: file table overflow, open '/Users/miqmago/Apps/myapp/app/www/img/fondo.png'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: ENFILE: file table overflow, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: ENFILE: file table overflow, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
error: 2016-12-24 10:55 - There was an error while processing before_prepare: Error: EMFILE: too many open files, open '/Users/miqmago/Apps/myapp/app/src/app/app.js'
    at Error (native)
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/pictures/pictures.remote.svc.js
[phonegap] file changed /Users/miqmago/Apps/myapp/app/www/app/pictures/pictures.svc.js
   [error] EMFILE: too many open files, scandir '/Users/miqmago/Apps/myapp/app/www/lib/asmcrypto/'

Hi @miqmago,
I'm not too sure how this hook works but when running phonegap serve we are not actually preparing anything. It is just taking what is in the www/ and serving those assets to the browser or device.
Are you making any changes to files in your src/, because from looking at the file you linked to it is then trying to copy all those files into www/. This would explain why you are seeing these logs.

I've tried disabling the hook to copy the files and the result is this one, so there is some process repeated after starting phonegap server:
add to body class: platform-android
add to body class: platform-browser
add to body class: platform-ios
[phonegap] starting app server...
[phonegap] listening on <IP_ADDRESS>:3000
[phonegap]
[phonegap] ctrl-c to stop the server
[phonegap]
add to body class: platform-android
add to body class: platform-browser
add to body class: platform-ios

add to body class it's an ionic hook being launched by hooks/after_prepare/010_add_platform_class.js. It's clearly being launched twice: one before starting to serve and another one after the server already started. This was not the behavior in 6.0.1 and it's something that seems suspicious to me.
The hook I've made to copy the files from src/ to www/ is this one:

phonegap serve
hook before_prepare

clean all www/ (delete it)
ensure www/ exists
copy every file from src/ to www/ with:

        () => new Promise((resolve, reject) => {
            const rs = fs.createReadStream(origin);
            const ws = fs.createWriteStream(to);
            ws.on('close', resolve);
            rs.on('error', reject);
            ws.on('error', reject);
            rs.pipe(ws);
        }

when all promises finished, start watching any change to src/ with chokidar
finish hook and continue

So if the hook is started twice, there is a big problem here.

Can you try copying your source code into a new phonegap project without any of the Ionic hooks. I am thinking there could be something in there that is getting messed up. We may have made some changes to the CLI that aren't working well with Ionics tools.
If you are able to serve that new app properly then the problem may be in Ionic and you might want to file an issue there.

Here it goes the logs. If you see at the end of the first one, there is something being done after phonegap serve has already started:
MacMiquel:Apps miqmago$ ionic start phonegap-demo
Creating Ionic app in folder /Users/miqmago/Apps/phonegap-demo based on tabs project
Downloading: https://github.com/driftyco/ionic-app-base/archive/master.zip
[=============================]  100%  0.0s
Downloading: https://github.com/driftyco/ionic-starter-tabs/archive/master.zip
[=============================]  100%  0.0s
Installing npm packages...

Adding initial native plugins
[=============================]  100%  0.0s

Adding in iOS application by default

add to body class: platform-ios
Downloading: https://github.com/driftyco/ionic-default-resources/archive/master.zip
[=============================]  100%  0.0s
Saving your Ionic app state of platforms and plugins
Saved platform
Saved plugins
Saved package.json

♬ ♫ ♬ ♫  Your Ionic app is ready to go! ♬ ♫ ♬ ♫

Make sure to cd into your new app directory:
  cd phonegap-demo

To run your app in the browser (great for initial development):
  ionic serve

To run on iOS:
  ionic run ios

To run on Android:
  ionic run android

To test your app on a device easily, try Ionic View:
  http://view.ionic.io

Building an Enterprise App? We can help!
  http://ionic.io/enterprise

New! Add push notifications, live app updates, and more with Ionic Platform!
  https://apps.ionic.io/signup

MacMiquel:Apps miqmago$ cd phonegap-demo/
MacMiquel:phonegap-demo miqmago$ phonegap serve
cp: no such file or directory<EMAIL_ADDRESS>
cp: no such file or directory<EMAIL_ADDRESS>
add to body class: platform-ios
[phonegap] starting app server...
[phonegap] listening on <IP_ADDRESS>:3000
[phonegap]
[phonegap] ctrl-c to stop the server
[phonegap]
cp: copyFileSync: could not write to dest file (code=ENOENT):/Users/miqmago/Apps/phonegap-demo/platforms/ios/HelloCordova/config.xml

And this "work being done after server started" is what makes the plugin ionic-plugin-build to fail (when it detects the serve command, it only runs the code in https://github.com/appfeel/ionic-plugin-build/blob/master/scripts/beforePrepare.js):
MacMiquel:phonegap-demo miqmago$ cordova plugin add ionic-plugin-build --save
Fetching plugin "ionic-plugin-build" via npm
Installing "ionic-plugin-build" for browser
Error loading cordova-browser
Installing "ionic-plugin-build" for ios
Saved plugin info for "ionic-plugin-build" to config.xml
cp: no such file or directory<EMAIL_ADDRESS>
cp: no such file or directory<EMAIL_ADDRESS>
npm WARN deprecated<EMAIL_ADDRESS>Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated<EMAIL_ADDRESS>Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN prefer global<EMAIL_ADDRESS>should be installed with -g

><EMAIL_ADDRESS>install /Users/miqmago/Apps/phonegap-demo/plugins/ionic-plugin-build/node_modules/fsevents
> node-pre-gyp install --fallback-to-build

[fsevents] Success: "/Users/miqmago/Apps/phonegap-demo/plugins/ionic-plugin-build/node_modules/fsevents/lib/binding/Release/node-v48-darwin-x64/fse.node" already installed
Pass --update-binary to reinstall or --build-from-source to recompile
<EMAIL_ADDRESS>/Users/miqmago/Apps/phonegap-demo/plugins/ionic-plugin-build
├─┬<EMAIL_ADDRESS>│ ├──<EMAIL_ADDRESS>│ ├──<EMAIL_ADDRESS>│ ├─┬<EMAIL_ADDRESS>│ │ └──<EMAIL_ADDRESS>│ ├──<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>(...)

warn: 2017-01-11 13:08 - Remember that all development has to be done in `src` folder
MacMiquel:phonegap-demo miqmago$ phonegap serve
info: 2017-01-11 13:08 - Watching /Users/miqmago/Apps/phonegap-demo/src
cp: no such file or directory<EMAIL_ADDRESS>
cp: no such file or directory<EMAIL_ADDRESS>
add to body class: platform-browser
add to body class: platform-ios
[phonegap] starting app server...
[phonegap] listening on <IP_ADDRESS>:3000
[phonegap]
[phonegap] ctrl-c to stop the server
[phonegap]
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/index.html
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/css/style.css
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/manifest.json
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/service-worker.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/img/adam.jpg
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/img/ben.png
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/img/ionic.png
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/img/max.png
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/img/mike.png
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/img/perry.png
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/js/app.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/js/controllers.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/js/services.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/version.json
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/css/ionic.css
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/css/ionic.min.css
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/fonts/ionicons.eot
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/fonts/ionicons.svg
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/fonts/ionicons.ttf
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/fonts/ionicons.woff
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic-angular.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic.bundle.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic-angular.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic.bundle.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular-ui/angular-ui-router.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular-animate.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular-ui/angular-ui-router.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular-animate.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular-resource.js
^C[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular-resource.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular-sanitize.js
^C[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular-sanitize.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_action-sheet.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_animations.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_backdrop.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_bar.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_badge.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_button-bar.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_checkbox.scss
^C[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_button.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_form.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_grid.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_list.scss
^C[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_items.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_loading.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_menu.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_mixins.scss
^C[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_modal.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_platform.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_popover.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_progress.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_popup.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_radio.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_range.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_refresher.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_reset.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_scaffolding.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_select.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_slide-box.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_slides.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_spinner.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_tabs.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_transitions.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_toggle.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_type.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_util.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/ionic.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/_variables.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/ionicons/_ionicons-font.scss
^C[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/ionicons/_ionicons-icons.scss
^C^C[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/ionicons/_ionicons-variables.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/scss/ionicons/ionicons.scss
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/templates/chat-detail.html
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/templates/tab-account.html
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/templates/tab-chats.html
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/templates/tab-dash.html
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/templates/tabs.html
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/fonts/ionicons.svg
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic-angular.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic.bundle.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic.bundle.min.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/ionic.js
[phonegap] file changed /Users/miqmago/Apps/phonegap-demo/www/lib/ionic/js/angular/angular.js

I am having a hard time reproducing this @miqmago.
I will close this for now as it's been a few months. If you are still having issues, feel free to re-open. In that case, can you provide the output to phonegap -d serve (which should give us info about which hooks are firing when) as well as the hook contents.


allow use external typeface in native code

Expose method to implement changing font family cache.  Like @ide suggested in #4420 , this will helpful for using remote font file (use Typeface#createFromFile to load downloaded font file).
iOS's CoreText  already allow this in native code.

@mkonicek @satya164 any updates on this?

@sospartan Most of the team is on holiday. So it might take some time for this to be reviewed.

@satya164 ok. Merry Christmas to you too.

cc @andreicoman11, @foghina

Just wanted to ping on this @mkonicek -- we're using this internally @ Exponent and it's working fine. Would love for this to go through final review and merged.

I'll take a look today.

Awesome @andreicoman11 gracias

Thanks for the ping @skevy.


upload-sarif@v1 : master does not match /^refs/(heads|pull|tags)/.*$/.

Hi,
I'm facing an issue uploading a SARIF file using upload-sarif@v1 on a self-hosted runner.
Here is my code (in a composite action) :
    - name: Scan image
      id: scan
      uses: sysdiglabs/scan-action@v3
      with:
       [...]

    - uses: github/codeql-action/upload-sarif@v1
      with:
        sarif_file: ${{ steps.scan.outputs.sarifReport }}

This works great when I push / PR to a branch called develop but an issue is happening when I apply the same composite action to master branch. It looks like for some reason the upload-sarif@v1 action doesn't call the API correctly ?
Here are the logs on develop (omitting env variables) :
Run github/codeql-action/upload-sarif@v1
  with:
    sarif_file: ./sarif.json
    checkout_path: /home/azureuser/actions-runner-2/runner/_work/my-app/my-app
    token: ***
    matrix: {
    "node-version": "16.3.0",
    "env": {
      "name": "development"
    }
  }
  env:
    [...]
Uploading results
  Processing sarif files: ["./sarif.json"]
  Uploading results
  Successfully uploaded results

I can see the uploaded results on the security tab of the github repo.
Here are the logs on master:
  Processing sarif files: ["./sarif.json"]
  Uploading results
  Error: Invalid request.

  master does not match /^refs\/(heads|pull|tags)\/.*$/.
  RequestError [HttpError]: Invalid request.

  master does not match /^refs\/(heads|pull|tags)\/.*$/.
      at /home/azureuser/actions-runner-2/runner/_work/_actions/github/codeql-action/v1/node_modules/@octokit/request/dist-node/index.js:66:23
      at processTicksAndRejections (internal/process/task_queues.js:93:5)
      at async Job.doExecute (/home/azureuser/actions-runner-2/runner/_work/_actions/github/codeql-action/v1/node_modules/bottleneck/light.js:405:18) {
    name: 'HttpError',
    status: 422,
    headers: {
      'access-control-allow-origin': '*',
      'access-control-expose-headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset',
      connection: 'close',
      'content-length': '141',
      'content-security-policy': "default-src 'none'",
      'content-type': 'application/json; charset=utf-8',
      date: 'Thu, 28 Oct 2021 06:12:21 GMT',
      'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin',
      server: 'GitHub.com',
      'strict-transport-security': 'max-age=31536000; includeSubdomains; preload',
      vary: 'Accept-Encoding, Accept, X-Requested-With',
      'x-content-type-options': 'nosniff',
      'x-frame-options': 'deny',
      'x-github-media-type': 'github.v3; format=json',
      'x-github-request-id': '0805:5EAA:1CCB18D:34AE888:617A3F44',
      'x-ratelimit-limit': '500',
      'x-ratelimit-remaining': '490',
      'x-ratelimit-reset': '1635404509',
      'x-ratelimit-resource': 'code_scanning_upload',
      'x-ratelimit-used': '10',
      'x-xss-protection': '0'
    },
    request: {
      method: 'PUT',
      url: 'https://api.github.com/repos/MYORG/my-app/code-scanning/analysis',
      headers: {
        accept: 'application/vnd.github.v3+json',
        'user-agent': 'CodeQL-Action/1.0.20 octokit-core.js/3.1.2 Node.js/12.13.1 (linux; x64)',
        authorization: 'token [REDACTED]',
        'content-type': 'application/json; charset=utf-8'
      },

...

The API doc mention that ref is  Required. The full Git reference, formatted as refs/heads/<branch name>,refs/pull/<number>/merge, or refs/pull/<number>/head. :  https://docs.github.com/en/rest/reference/code-scanning#upload-an-analysis-as-sarif-data
Using this action we have no control other what the action sends to the API so it is not possible in our end to enforce the full git reference.
Is this a known issue ? Any reason why I am facing here in a master branch but not on other branches ?

Hi @totogtr  and @aeisenberg I'm facing the same issue. Were you able to explicitly set the /refs/heads ? I could not seem to explicitly set GITHUB_REF to any value. Thanks!

I haven't heard back to hear if the solution works, but you could add a step like this in your composite action before uploading:
     - name: Update GITHUB_REF
        run: |
              if [[ ! "$GITHUB_REF" =~ ^\/refs\/heads\/.*$ ]]; then
               echo "/refs/heads/$GITHUB_REF" >> >> "$GITHUB_ENV"
              fi
      - name: Check GITHUB_REF
         run: echo "$GITHUB_REF"

I haven't tried this out directly, but in theory, this should update the GITHUB_REF env variable if it doesn't already start with /refs/heads/.

@totogtr would you be able to share the full Actions workflow file, so that we can see the different events your workflow is running on?

@adityasharad Hi, sorry I cannot share the full action, some as client data in it.
I've just hit this issue again today (1st time since my last message !)
Is there anything in https://github.com/github/codeql-action/pull/889 that would help us fix it?

Yes, the upload-sarif action now supports a ref and sha input. So, you can specify the values you want using the with property:
    - uses: github/codeql-action/upload-sarif@v1
      with:
        ref: '${{ ref }}'
        sha: '${{ sha }}'

You need to specify both of them together.


RequestTrait

::getRequestTarget()
http://tools.ietf.org/html/rfc7230#section-5.3.1

The most common form of request-target is the origin-form.
origin-form    = absolute-path [ "?" query ]

The query component is optional, the path is required.
But in code if exists only query - return it
        $target = $this->uri->getPath();
        if ($this->uri->getQuery()) {
            $target .= '?' . $this->uri->getQuery();
        }
        if (empty($target)) {
            $target = '/';
        }

probably it would be correct:
        $target = $this->uri->getPath();
        if (! $target) {
            $target = '/';
        }
        if ($this->uri->getQuery()) {
            $target .= '?' . $this->uri->getQuery();
        }
        return $target;

::withRequestTarget()
if (preg_match('#\s#', $requestTarget)) {
...

What if my path contains not ASCII characters?
Probably, the URI class must have public methods encode and decode?
Moreover, the PSR-7 almost directly talking about it:

Users can provide both encoded and decoded path characters.

That is, if the user wants to decode the string - there are decoding method.
If we need to encode a string (eg, target) - there is an encoding method.

This repository has been closed and moved to laminas/laminas-diactoros; a new issue has been opened at https://github.com/laminas/laminas-diactoros/issues/25.


add recipes for freelancers

add recipes for freelancers
edit recipes for freelancers after test

Pre-flight Checklist
Please ensure you've completed all of the following.

[*] I have read the Contributing Guidelines for this project.
[*] I agree to follow the Code of Conduct that this project adheres to.

Adding new recipe
Service: services for freelancers, it contains various freelancers platform, i intended to add more of if, but for now i already have 3 of those
URL: guru.com, truelancer.com, peopleperhour.com
Service ID: guru.com, truelancer, peopleperhour
Terminal output
><EMAIL_ADDRESS>package /run/media/officestorage/karya/contrib/github/ferdium-recipes
> node scripts/package.js

✅ Successfully packaged and added 348 recipes (0 unsuccessful recipes)

Additional information

[*] I am the original creator of this package
[*] I have run the pnpm lint:fix && pnpm reformat-files && pnpm package and verified that there are no validation errors reported for this package
[*] My recipe has been tested to work inside Ferdium

everything resolved, thank u for the guidance @SpecialAro

i want to resolve issue on ferdium/ferdium-app#1742 to add recipe of upwork should i create new pr or can i just add the recipe here? @vraravam @SpecialAro

i want to resolve issue on ferdium/ferdium-app#1742 to add recipe of upwork should i create new pr or can i just add the recipe here? @vraravam @SpecialAro

pls create a new PR

@all-contributors please add @sakarimov for code


Tests

Unit or integration? Both?

Testing story is a little in its infancy right now. Added some basic coverage would like to revisit if the .NET Aspire team makes some packages public (vs in their repo exclusively). In addition, some of the testing relies on project internals being visible at this time.


Checklist for Offboarding David

Platform Operator Offboarding Checklist
Special Notes

Do not create this issue until the System Owner has formally authorized and requested it. You can obtain that OK by one of two ways:
A:

[ ] A: System Owner creates this issue

B:

[x] B.1: System owner emails<EMAIL_ADDRESS>and<EMAIL_ADDRESS>with their authorization
[x] B.2: An operator adds links to the email archive of the authorizing email:
Authorizing email

Please only use first names.

Instructions
In order to complete Existing Person's exit from the cloud.gov team, the assignee should complete a prescribed set of tasks that will remove any special access.
Assignee: The tasks below are organized by the role needed to complete them. If you can’t complete any of the items on your checklist personally, you are responsible for ensuring that an appropriate person does it.
For compliance we need to show that critical offboarding actions happen within 24 hours of departure; some actions below need GitHub issues comments when completed. Completing tasks before departure is good. (control PS-4: personnel termination).
Existing Person

[ ] Initiate the process via the Leaving TTS Handbook page

Assignee
If the person offboarding is a contractor, reach out to the COR to ensure any offboarding steps specific to their contract are being completed.

[ ] Mention the TTS HR liaison and TTS Tech Portfolio in this ticket so they can update with their status. Make sure that someone from TTS Tech Portfolio or you have completed these items:

[x] Remove their access to StatusPage
[x] Remove their agent access to Zendesk - switch their role to "end user"
[ ] Update this issue with a comment within 24h of departure that the above steps are complete

[x] Remove them from @cg-team, @cg-operators, and any other @cg- teams in the Slack Team Directory using the three-dot menu (instructions)
[x] Remove them from the team roster
[x] Remove them from the squad list
[x] In the training tracker: if they're staying at TTS, move them to the "former teammates" tab; if they're leaving TTS, delete them from the spreadsheet
[x] Remove them as invitees for any meetings on the cloud.gov calendar where they are specifically named

Invites where they are listed as part of the cloud.gov invitee group will be removed when they are removed from that group by the System Owner

[x] Remove them from our dockerhub org

System Owner (or person delegated by System Owner)
The following steps must be conducted and documented within 24 hours of departure:

[ ] Exit interview with supervisor or contract account manager: Discuss with departee the following information security topics:

They are to remove any non-public cloud.gov data (e.g. keys, passwords, code, documents) from any non-GSA device
They are not to disclose any non-public cloud.gov technical practices without authorization from GSA
They will not access cloud.gov systems or services without authorization from GSA
If the System Owner cannot hold this discussion, they will communicate to GSA OHRM that the above topics need to be communicated to the leaving person.

[x] Remove them from the cloud.gov Github organization
[x] Remove them from the cloud.gov team Google Group
[ ] If they are part of the business unit, remove their access to GovDelivery

The following do not directly impact cloud.gov security & operations and can happen later:

[x] Remove them from Nessus
[ ] Remove them from [Tenable (if Compliance Team)](https://community.tenable.com/s/contacts]
[x] Remove them from the CG-PRIV Space
[x] Remove them from the Cloud Foundry Community GitHub org cloud.gov team
[x] Remove them from the cloud.gov operations Google Group
[x] Remove them from the cloud.gov compliance team Google Group
[x] Remove them from the cloud.gov notifications Google Group
[ ] Remove them from the cloud.gov inquiries Google Group
[x] Remove them from the cloud.gov support Google Group
[x] Remove them from the cloud.gov emergency Google Group
[ ] Remove them from our Google Groups for our AWS accounts (relevant for PM, Director, and Deputy Director)
[ ] Remove them from Search.gov access for cg-site by pinging the search.gov team in the #search Slack channel
[x] Remove them from Ubuntu Advantage

Cloud Operations
The following steps must be conducted and documented within 24 hours of departure:

[x] Delete the user in all cloud.gov AWS accounts by submitting a PR to aws-admin
[x] Remove their access as an admin on the platform
[x] Remove any privileges that their cloud.gov account has due to membership in the cloud.gov team (even if not in Cloud Ops), such as admin_ui.user and scim.read

[x] Verify these permissions have been removed using the cg-scripts validate-admins.sh run from a jumpbox

[x] Remove any Org or Space roles that their cloud.gov account holds due to membership in the cloud.gov team (for example, remove them from the cloud-gov and cloud-gov-operators organizations)
[x] Ensure any keys or passwords they had direct access to are rotated

@melanienleopold can you add links to the ServiceNow tickets and/or status updates for David for his removal from GSA ?  Thanks

I did all I could do/had access to.  Unchecked boxes either are not applicable for this person or I did not have access to verify and/or remove access to the specific item.

Per @melanienleopold David's been moved to a different contract in TTS so his access has shifted to that contract and his laptop is being returned.


What is the reasoning behind DJANGO_READ_DOT_ENV_FILE?

Since this commit, the .env isn't loaded without manually setting DJANGO_READ_DOT_ENV_FILE.
The comment states:

.env file, should load only in development environment

I don't really agree with this since we use .env files extensively on production servers. Not a big problem as we can easily add DJANGO_READ_DOT_ENV_FILE to the supervisor config. But I don't understand what problem it fixes.
For local development this is a bit cumbersome. There's no documentation explaining the need to set this variable. I'd expect it here for example.
This env variable also isn't set in local docker config (dev.yml), disabling the possibility to overwrite settings via a .env file.

I don't bother with .env so I'm not the person who can answer your question. Perhaps @jayfk or @webyneter can weigh in?

Honestly, I don't even know. There were some people complaining about not being able to use the .env file on vanilla Python so the DJANGO_READ_DOT_ENV_FILE environment variable was invented.

@svleeuwen, see #985

I do not use the .env file in development so I do not want it turned on by default.
Keep in mind I'm not too happy with how django-environ manages the .env file behavior, as I know it's confusing and annoying. At some point I may give up and we'll implement something of our own.

Are you given though to this on replacing django-environ with another package or to develop an inhouse implementation?
If the alternative is to incorporate another package, which one would be a good candidate?

Are you given though to this on replacing django-environ with another package or to develop an inhouse implementation?

Replacing this package will be a lot of work. Except for some edge cases, it works okay, so why spend the effort? Also, I would rather piggy back of a package then invent something new that has to be maintained. Unless there's a pressing need, and funds to support the reviews by core maintainers are made available, we're not switching.

If the alternative is to incorporate another package, which one would be a good candidate?

Why don't you do the research yourself instead of asking others to volunteer their free time? Compare a dozen options for suitability, summarize the ones you think are good, and suggest the best three in a separate issue.

What I was really looking for was perhaps a slightly more interesting conversation and perhaps some introspection about the previous experience some of you might have on the subject; but leaving aside the disobliging response and to abandon the line of argument and focus on something that is worth the time:
I had already done some work on this, testing some of the packages that available out there, and wanted to listen to the opinions of those who had tried the same process before:
EnvParse - It requires a lot of legwork with its preprocessors which makes the implementation much harder than it should be, and the project is inactive.
Honcho - Mainly focused on Procfiles, and the things it involves.
python-dotenv - This package looks promising but only reads the variables and assign them in memory; you still require to capture them with os.getenv, additionally, it looks like the package does not parses database addresses in URI format.
python-decouple - Lacks a proper database URI workflow and to solve it they suggest to use an additional package, the project is actually inactive.
django-dotenv - Haven't tested it, but it looks like needs to be loaded into the WSGI process, which perhaps hurts the possibility to implement django-channels, the project is inactive.

I was just looking to see how I could use the .env file in dev automatically without needing to define the DJANGO_READ_DOT_ENV_FILE environment variable.  This little hack in config/settings/local.py seems to do the trick nicely.  I figured it might give the next person a head start.  If there is a better way please let us know.
config/settings/local.py
import socket
import os
os.environ["DJANGO_READ_DOT_ENV_FILE"] = "true"
from .base import *  # noqa

@jeffcjohnson nice trick

prettyconf - PrettyConf is a Python library created to make easy the separation of configuration and code following the recomendations of 12 Factor's topic about configs. It is strongly inspired in python-decouple and both provides a similar API. (The project is active, and the code stable.)

My 2 cents:
In hosted PaaS environments (such as Heroku, AWS), you set environment variables through CLI or other means. Typically this is not done through an .env file. I am +1 on keeping the solution as is.

I do not use the .env file in development so I do not want it turned on by default.
Keep in mind I'm not too happy with how django-environ manages the .env file behavior, as I know it's confusing and annoying. At some point I may give up and we'll implement something of our own.

Hello
How/Where do you store your DB connection strings then ? What if you have two different dev environment which need different settings ?

I do not use the .env file in development so I do not want it turned on by default.
Keep in mind I'm not too happy with how django-environ manages the .env file behavior, as I know it's confusing and annoying. At some point I may give up and we'll implement something of our own.

Hello
How/Where do you store your DB connection strings then ? What if you have two different dev environment which need different settings ?

Did you ever figure this out by any chance...?


trimmed trailing whitespace

Uh oh... those whitespaces are deliberate. They get transformed to line breaks when ran through docco.