mirror of
				https://github.com/rust-lang/cargo.git
				synced 2025-11-03 13:12:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
# This script is used to publish Cargo to crates.io.
 | 
						|
 | 
						|
import os
 | 
						|
import re
 | 
						|
import subprocess
 | 
						|
import time
 | 
						|
import urllib.request
 | 
						|
from urllib.error import HTTPError
 | 
						|
 | 
						|
 | 
						|
TO_PUBLISH = [
 | 
						|
    'crates/cargo-platform',
 | 
						|
    'crates/crates-io',
 | 
						|
    '.',
 | 
						|
]
 | 
						|
 | 
						|
 | 
						|
def already_published(name, version):
 | 
						|
    try:
 | 
						|
        urllib.request.urlopen('https://crates.io/api/v1/crates/%s/%s/download' % (name, version))
 | 
						|
    except HTTPError as e:
 | 
						|
        if e.code == 404:
 | 
						|
            return False
 | 
						|
        raise
 | 
						|
    return True
 | 
						|
 | 
						|
 | 
						|
def maybe_publish(path):
 | 
						|
    content = open(os.path.join(path, 'Cargo.toml')).read()
 | 
						|
    name = re.search('^name = "([^"]+)"', content, re.M).group(1)
 | 
						|
    version = re.search('^version = "([^"]+)"', content, re.M).group(1)
 | 
						|
    if already_published(name, version):
 | 
						|
        print('%s %s is already published, skipping' % (name, version))
 | 
						|
        return False
 | 
						|
    subprocess.check_call(['cargo', 'publish', '--no-verify'], cwd=path)
 | 
						|
    return True
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    print('Starting publish...')
 | 
						|
    for i, path in enumerate(TO_PUBLISH):
 | 
						|
        if maybe_publish(path):
 | 
						|
            if i < len(TO_PUBLISH)-1:
 | 
						|
                # Sleep to allow the index to update. This should probably
 | 
						|
                # check that the index is updated, or use a retry loop
 | 
						|
                # instead.
 | 
						|
                time.sleep(5)
 | 
						|
    print('Publish complete!')
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |