npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@stratiformdigital/serverless-idempotency-helper

v3.2.1

Published

Serverless plugin to help make deployments idempotent.

Downloads

49

Readme

Usage

...

plugins:
  - serverless-idempotency-helper

...

Background

Notes on implementation:

  • The atime and mtime of files contained in zip files affect the commit hash, but aren't relevant to our deployment logic. So, atime/mtime should be washed out of the zip, so the commit hash delta reflects our desired behavior.
  • The serverless-bundle and serverless-webpack plugins generate new source code (the packed source code) on every deployment. As such, atime/mtime is always an issue when using these plugins.
  • The inclusion of directory entries in function archives causes the sha256 checksum to be different. To skip adding directory entries, the "-D" flag is set for the zip command. This causes no functional change to the archive, but allows for an idempotent zip. This behavior was observed on ubuntu, and it was not observed on osx... so on mac, the zip was idempotent without the "-D" flag, but on linux the "-D" flag was necessary.
  • This plugin hooks into package:createDeploymentArtifacts. The user defined functions (from the functions key in serverless.yml) are repacked at this step. We need to repack these functions no later than this lifecycle event, because it's seemingly just before Serverless decides the commit hashes of these archives. If we repack later than this step, there will be a mismatch between the commit hash according to Serverless and the true commit hash, causing a CloudFormation failure. Previously this plugin had been written to change atime/mtime of pre-zipped webpack output, or pre-zipped source code, but repacking after all that seemed a more consistent approach.
  • This plugin hooks into package:compileEvents. Just after this step is when custom, non-user-defined archives appear. A good example of this is the custom resource generated by turning on api gateway logging. When you enable logging via the provider.logging.restApi attribute, a custom resource with a corresponding lambda archive is generated at this step. We need to repack that archive just like the user defined functions archives, or we will be non-idempotent. This requirement is what drove repacking all archives; instead of changing atime/mtime of pre-zipped files for functions and repacking custom zips, we repack everything; the consistent approach is seen as worthwhile.

License

License: MIT

See LICENSE for full details.