fix(publish): skip private workspaces · npm/cli@4a4fbe3 (original) (raw)
`@@ -617,3 +617,148 @@ t.test('workspaces', (t) => {
`
617
617
`})
`
618
618
`t.end()
`
619
619
`})
`
``
620
+
``
621
`+
t.test('private workspaces', (t) => {
`
``
622
`+
const testDir = t.testdir({
`
``
623
`+
'package.json': JSON.stringify({
`
``
624
`+
name: 'workspaces-project',
`
``
625
`+
version: '1.0.0',
`
``
626
`+
workspaces: ['packages/*'],
`
``
627
`+
}),
`
``
628
`+
packages: {
`
``
629
`+
a: {
`
``
630
`+
'package.json': JSON.stringify({
`
``
631
`+
name: '@npmcli/a',
`
``
632
`+
version: '1.0.0',
`
``
633
`+
private: true,
`
``
634
`+
}),
`
``
635
`+
},
`
``
636
`+
b: {
`
``
637
`+
'package.json': JSON.stringify({
`
``
638
`+
name: '@npmcli/b',
`
``
639
`+
version: '1.0.0',
`
``
640
`+
}),
`
``
641
`+
},
`
``
642
`+
},
`
``
643
`+
})
`
``
644
+
``
645
`+
const publishes = []
`
``
646
`+
const outputs = []
`
``
647
`+
t.beforeEach(() => {
`
``
648
`+
npm.config.set('json', false)
`
``
649
`+
outputs.length = 0
`
``
650
`+
publishes.length = 0
`
``
651
`+
})
`
``
652
`+
const mocks = {
`
``
653
`+
'../../lib/utils/tar.js': {
`
``
654
`+
getContents: (manifest) => ({
`
``
655
`+
id: manifest._id,
`
``
656
`+
}),
`
``
657
`+
logTar: () => {},
`
``
658
`+
},
`
``
659
`+
libnpmpublish: {
`
``
660
`+
publish: (manifest, tarballData, opts) => {
`
``
661
`+
if (manifest.private) {
`
``
662
`+
throw Object.assign(
`
``
663
`+
new Error('private pkg'),
`
``
664
`+
{ code: 'EPRIVATE' }
`
``
665
`+
)
`
``
666
`+
}
`
``
667
`+
publishes.push(manifest)
`
``
668
`+
},
`
``
669
`+
},
`
``
670
`+
}
`
``
671
`+
const npm = mockNpm({
`
``
672
`+
output: (o) => {
`
``
673
`+
outputs.push(o)
`
``
674
`+
},
`
``
675
`+
})
`
``
676
`+
npm.localPrefix = testDir
`
``
677
`+
npm.config.getCredentialsByURI = (uri) => {
`
``
678
`+
return { token: 'some.registry.token' }
`
``
679
`+
}
`
``
680
+
``
681
`+
t.test('with color', t => {
`
``
682
`+
const Publish = t.mock('../../lib/publish.js', {
`
``
683
`+
...mocks,
`
``
684
`+
npmlog: {
`
``
685
`+
notice () {},
`
``
686
`+
verbose () {},
`
``
687
`+
warn (title, msg) {
`
``
688
`+
t.equal(title, 'publish', 'should use publish warn title')
`
``
689
`+
t.match(
`
``
690
`+
msg,
`
``
691
`+
'Skipping workspace \u001b[32m@npmcli/a\u001b[39m, marked as \u001b[1mprivate\u001b[22m',
`
``
692
`+
'should display skip private workspace warn msg'
`
``
693
`+
)
`
``
694
`+
},
`
``
695
`+
},
`
``
696
`+
})
`
``
697
`+
const publish = new Publish(npm)
`
``
698
+
``
699
`+
npm.color = true
`
``
700
`+
publish.execWorkspaces([], [], (err) => {
`
``
701
`+
t.notOk(err)
`
``
702
`+
t.matchSnapshot(publishes, 'should publish all non-private workspaces')
`
``
703
`+
t.matchSnapshot(outputs, 'should output all publishes')
`
``
704
`+
npm.color = false
`
``
705
`+
t.end()
`
``
706
`+
})
`
``
707
`+
})
`
``
708
+
``
709
`+
t.test('colorless', t => {
`
``
710
`+
const Publish = t.mock('../../lib/publish.js', {
`
``
711
`+
...mocks,
`
``
712
`+
npmlog: {
`
``
713
`+
notice () {},
`
``
714
`+
verbose () {},
`
``
715
`+
warn (title, msg) {
`
``
716
`+
t.equal(title, 'publish', 'should use publish warn title')
`
``
717
`+
t.equal(
`
``
718
`+
msg,
`
``
719
`+
'Skipping workspace @npmcli/a, marked as private',
`
``
720
`+
'should display skip private workspace warn msg'
`
``
721
`+
)
`
``
722
`+
},
`
``
723
`+
},
`
``
724
`+
})
`
``
725
`+
const publish = new Publish(npm)
`
``
726
+
``
727
`+
publish.execWorkspaces([], [], (err) => {
`
``
728
`+
t.notOk(err)
`
``
729
`+
t.matchSnapshot(publishes, 'should publish all non-private workspaces')
`
``
730
`+
t.matchSnapshot(outputs, 'should output all publishes')
`
``
731
`+
t.end()
`
``
732
`+
})
`
``
733
`+
})
`
``
734
+
``
735
`+
t.test('unexpected error', t => {
`
``
736
`+
const Publish = t.mock('../../lib/publish.js', {
`
``
737
`+
...mocks,
`
``
738
`+
libnpmpublish: {
`
``
739
`+
publish: (manifest, tarballData, opts) => {
`
``
740
`+
if (manifest.private)
`
``
741
`+
throw new Error('ERR')
`
``
742
+
``
743
`+
publishes.push(manifest)
`
``
744
`+
},
`
``
745
`+
},
`
``
746
`+
npmlog: {
`
``
747
`+
notice () {},
`
``
748
`+
verbose () {},
`
``
749
`+
},
`
``
750
`+
})
`
``
751
`+
const publish = new Publish(npm)
`
``
752
+
``
753
`+
publish.execWorkspaces([], [], (err) => {
`
``
754
`+
t.match(
`
``
755
`+
err,
`
``
756
`+
/ERR/,
`
``
757
`+
'should throw unexpected error'
`
``
758
`+
)
`
``
759
`+
t.end()
`
``
760
`+
})
`
``
761
`+
})
`
``
762
+
``
763
`+
t.end()
`
``
764
`+
})
`