Better checks that static file routing works as expected #23014
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Relates: mozilla/addons#15066
Description
First add checks to static file handling and better debugging of nginx static file serving
clean_storage
tomake_storage
for clarity and added aclean
parameter.make_storage
method.Second add content hashing of static built directories allowing guarantees that static files created during the build are not modified at runtime.
Context
We serve static files from several possible sources. This PR ensures we understand where a file was served from and also have tests ensuring the routing through nginx works as expected.
Testing
Test NGINX routing
CI should suffice as it runs the make checks but you can break the routing in
addons.conf
and re-run the checks to ensure they fail. Comment out the /static file handler or specific blocks to force nginx to serve no files or files from incorrect sourcesTest content hashing
Run in prod mode (make down first to guarantee correct volumes are used)
make down && make up DOCKER_TARGET=production OLYMPIA_DEPS=development OLYMPIA_MOUNT=development
Then shell into the container
make shell
and runVerify that the content hashes for
static-files
andlocales
match in both places. the build-info.json file is from the image build and the script is running against the current state in the container.You can verify that this breaks the checks by modifying a file in either of the directories
And then run checks
This will raise an error that the content hash has changed which is not allowed on production targets. If you remove the file, the check should then pass again.
Tip
Bonus points
You can freely modify the
staticfiles.json
file in site-static because this file is non-deterministic and thus excluded from the content hash.Checklist
#ISSUENUM
at the top of your PR to an existing open issue in the mozilla/addons repository.