Skip to main content

Azure Static Web Apps - Failed to find a default file in the app artifacts folder. Valid default files: index.html,Index.html.

For a pet project I'm working on, I created a new Angular application using Angular 19. I used the same Github Actions setup I was using for my other projects. However, this time, the build failed with the following error message:

Failed to find a default file in the app artifacts folder (dist/treasurehunt). Valid default files: index.html,Index.html.

If your application contains purely static content, please verify that the variable 'app_location' in your workflow file points to the root of your application.

If your application requires build steps, please validate that a default file exists in the build output directory.


Here is the GitHub Actions file that was used:

Important to notice here are the following settings:

  • app_location: This is the location where the Azure Static Web App build task looks for the source code
  • output_location: This is the location where the Azure Static Web App looks for the final application. This should match with your configuration in the Angular.json file (check the outputPath setting):

As I mentioned in the intro, this is the default setup I've been using for a while and that always worked before. Until now...

What has changed?

The question now becomes: 'What has changed?' There should be something different that explains this issue…

After comparing different projects, I noticed that this was the first project that was using Angular 19 whereas previous applications were using Angular 17 or before.  Aha!

Turns out that starting from Angular 18, the Angular team has updated the Angular CLI design to always output publicly accessible files in browser directory and the ssr files in server directory and other files such as statistics and licenses information in the root output path.

This means that the final application code (including the missing index.html) file could be found in the dist\treasurehunt\browser folder instead of the dist\treasurehunt\ folder as before.

Fixing this issue was simple, I updated the output_location in the GitHub Actions file to take this change into account:

Popular posts from this blog

.NET 8–Keyed/Named Services

A feature that a lot of IoC container libraries support but that was missing in the default DI container provided by Microsoft is the support for Keyed or Named Services. This feature allows you to register the same type multiple times using different names, allowing you to resolve a specific instance based on the circumstances. Although there is some controversy if supporting this feature is a good idea or not, it certainly can be handy. To support this feature a new interface IKeyedServiceProvider got introduced in .NET 8 providing 2 new methods on our ServiceProvider instance: object? GetKeyedService(Type serviceType, object? serviceKey); object GetRequiredKeyedService(Type serviceType, object? serviceKey); To use it, we need to register our service using one of the new extension methods: Resolving the service can be done either through the FromKeyedServices attribute: or by injecting the IKeyedServiceProvider interface and calling the GetRequiredKeyedServic...

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

Kubernetes–Limit your environmental impact

Reducing the carbon footprint and CO2 emission of our (cloud) workloads, is a responsibility of all of us. If you are running a Kubernetes cluster, have a look at Kube-Green . kube-green is a simple Kubernetes operator that automatically shuts down (some of) your pods when you don't need them. A single pod produces about 11 Kg CO2eq per year( here the calculation). Reason enough to give it a try! Installing kube-green in your cluster The easiest way to install the operator in your cluster is through kubectl. We first need to install a cert-manager: kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.yaml Remark: Wait a minute before you continue as it can take some time before the cert-manager is up & running inside your cluster. Now we can install the kube-green operator: kubectl apply -f https://github.com/kube-green/kube-green/releases/latest/download/kube-green.yaml Now in the namespace where we want t...