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

@interaktiv/sfdx-git-packager

v0.3.0

Published

Generates a package.xml for difference between two branches

Downloads

43

Readme

sfdx-git-packager

npm Build Status

Generates a metadata package (package.xml & source files) for differences between two git refs (branches or commits).

The goal of this project is to be able to generate incremental, deployable packages to use in a CI or developer workflows (see our Callaway Cloud CI for an example). Unfortunately, there are still some scenario's which are not supported. We attempt to document these problems and workarounds in this document.

📦 Install

Run sfdx plugins:install sfdx-git-packager

✨Features

Currently supports:

  • ApexClass
  • ApexTrigger
  • VisualForce
  • Aura
  • LWC
  • CustomObject
  • CustomField
  • StaticResources (both folders and single files)
  • CustomLabels (partial changes)
  • all other simple *-meta.xml files
  • Destructive Changes!

Not yet supported:

  • Partial profile deployments
  • ??? (please submit an issue if you run into anything else)

🔨 Usage

Must be run from inside an sfdx project with an initialized git repo.

sfdx git:package -d <string> [-s <string>] [-t <string>] [-w] [--purge] [--nodelete] [-f] [--json] [--loglevel trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

Generates a Metadata Package using the differences between two git refs (branch or commit)

USAGE
  $ sfdx git:package -d <string> [-s <string>] [-t <string>] [-w] [--purge] [--nodelete] [-f] [--json] [--loglevel 
  trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]

OPTIONS
  -d, --outputdir=outputdir                                                         (required) The directory to output
                                                                                    the generated package and metadata
                                                                                    to

  -f, --force                                                                       Continue even if source is behind
                                                                                    target

  -s, --sourceref=sourceref                                                         [default: HEAD] The git ref (branch
                                                                                    or commit) which we are deploying
                                                                                    from. If left blank, will use head

  -t, --targetref=targetref                                                         [default: master] The git ref
                                                                                    (branch or commit) which we are
                                                                                    deploying into. Defaults to master

  -w, --ignorewhitespace                                                            Don't package changes that are
                                                                                    whitespace only

  --json                                                                            format output as json

  --loglevel=(trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL)  [default: warn] logging level for
                                                                                    this command invocation

  --nodelete                                                                        Don't generate
                                                                                    destructiveChanges.xml for deletions

  --purge                                                                           Delete output dir if it already
                                                                                    exists (without prompt)

EXAMPLES
  $ sfdx git:package -s my-awesome-feature -t master -d deploy/my-feature
  $ sfdx git:package -d deploy/my-feature
  $ sfdx git:package -s feature-b -d deploy/feature-b

See code: lib/commands/git/package.js

Ignore Files

If you wish to prevent certain files from being included in a package, you can create a .packageIgnore in the root of your project. This works similar to .gitIgnore. You can add globs to prevent source path from being picked up.

🤝 Contributing

Project setup

  1. git clone
  2. cd
  3. yarn/npm install
  4. sfdx plugins:link

Testings

npm test just runs the basic test suite, not much here yet

Integration Testing

npm run integrationTest runs integration test suite

Setting Up Integration Tests

We've got a git repo in test/integration/project that represents a project. In order to avoid conflicts with the parent repo folders we change the .git folder to .notgit so we can commit those to the repo. You'll need to "unpack" that repo if you want to easily work in the test git repo when expanding the integration suite.

To add new tests

  1. revert the .git file: npm run tgu
  2. go to the test project cd test/integration/project
  3. create a branch off of master, make the mods you want to test, and commit
  4. generate the expected output npm run gen
  5. check the contents of test/integration/output matches what you'd expect for your change (make sure to check there are no other unexpected changes!)
  6. add a new test to test/integration/integration.test.ts
  7. pack the test repo back up npm run tgp

Updating the base state (master)

You might find the base state (master branch) is not setup properly in order to perform some test (you add a support for metadata not part of master). If you need to modify the base state, follow these instructions:

  1. Open the integration project. Run npm run tgu if you haven't already.
  2. git checkout master
  3. make your changes. Try to avoid making changes that will cause merge conflicts on any of the other branches
  4. commit your changes to master
  5. Sync master to all other branches by running ./syncMaster.sh

Disclaimer

THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.