(List (Com {[LIT_CHARS set]} {[LIT_CHARS -e]} ) (Com {[LIT_CHARS set]} {[LIT_CHARS -o]} {[LIT_CHARS pipefail]} ) (FunctionDef usage [] (List (Com {[LIT_CHARS cat]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "To run, I need:\n"] [LIT_CHARS "- to be in a container generated by the Dockerfile at the top of the Docker\n"] [LIT_CHARS " repository;\n"] [LIT_CHARS "- to be provided with the name of an S3 bucket, in environment variable\n"] [LIT_CHARS " AWS_S3_BUCKET;\n"] [LIT_CHARS "- to be provided with AWS credentials for this S3 bucket, in environment\n"] [LIT_CHARS " variables AWS_ACCESS_KEY and AWS_SECRET_KEY;\n"] [LIT_CHARS "- the passphrase to unlock the GPG key which will sign the deb packages\n"] [LIT_CHARS " (passed as environment variable GPG_PASSPHRASE);\n"] [LIT_CHARS "- a generous amount of good will and nice manners.\n"] [LIT_CHARS "The canonical way to run me is to run the image produced by the Dockerfile: e.g.:\"\n"] [LIT_CHARS "\n"] [LIT_CHARS "docker run -e AWS_S3_BUCKET=test.docker.com \\\n"] [LIT_CHARS " -e AWS_ACCESS_KEY=... \\\n"] [LIT_CHARS " -e AWS_SECRET_KEY=... \\\n"] [LIT_CHARS " -e GPG_PASSPHRASE=... \\\n"] [LIT_CHARS " -i -t --privileged \\\n"] [LIT_CHARS " docker ./hack/release.sh\n"]} 0), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub AWS_S3_BUCKET]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS usage]} ) ) (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub AWS_ACCESS_KEY]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS usage]} ) ) (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub AWS_SECRET_KEY]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS usage]} ) ) (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub GPG_PASSPHRASE]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS usage]} ) ) (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -d]} {[LIT_CHARS /go/src/github.com/docker/docker]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS usage]} ) ) (Com {[LIT_CHARS cd]} {[LIT_CHARS /go/src/github.com/docker/docker]} ) (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -x]} {[LIT_CHARS hack/make.sh]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS usage]} ) ) (= scope= flags=0 words=[] bindings=[('RELEASE_BUNDLES', {[Array {OP_NEWLINE "\n"} {[LIT_CHARS binary]} {OP_NEWLINE "\n"} {[LIT_CHARS cross]} {OP_NEWLINE "\n"} {[LIT_CHARS tgz]} {OP_NEWLINE "\n"} {[LIT_CHARS ubuntu]} {OP_NEWLINE "\n"}]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub 1]]} {[LIT_NEQUAL "!="]} {[SQ ]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('RELEASE_BUNDLES', {[Array {OP_NEWLINE "\n"} {[LIT_CHARS test-unit]} {[LIT_CHARS test-integration]} {OP_NEWLINE "\n"} {[DQ [VarSub RELEASE_BUNDLES bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]]} {OP_NEWLINE "\n"} {[LIT_CHARS test-integration-cli]} {OP_NEWLINE "\n"}]})]) ) (= scope= flags=0 words=[] bindings=[('VERSION', {[ComSub (Com {[LIT_CHARS cat]} {[LIT_CHARS VERSION]})]})]) (= scope= flags=0 words=[] bindings=[('BUCKET', {[VarSub AWS_S3_BUCKET]})]) (FunctionDef setup_s3 [] (List (AndOr OP_OR_IF (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS mb]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS true]} ) ) (Pipeline (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS info]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET]} ) (Com {[LIT_CHARS grep]} {[LIT_CHARS -q]} {[LIT_CHARS .]} ) ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS ws-create]} {[LIT_CHARS --ws-index]} {[LIT_CHARS index]} {[LIT_CHARS --ws-error]} {[LIT_CHARS error]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET]} ) ) ) (FunctionDef write_to_s3 [] (List (= scope= flags=0 words=[] bindings=[('DEST', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('F', {[ComSub (Com {[LIT_CHARS mktemp]})]})]) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[VarSub F]} "> 1), > ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS --mime-type] [LIT_DBRACKET_LIKE "="] [SQ ]} {[LIT_CHARS put]} {[VarSub F]} {[VarSub DEST]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub F]} ) ) ) (FunctionDef s3_url [] (Case to_match={[DQ [VarSub BUCKET]]}, pat_word_list=[[{[LIT_CHARS get.docker.com]}, {[LIT_CHARS test.docker.com]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "https://"][VarSub BUCKET]]} ) (Pipeline (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS ws-info]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET]} ) (Com {[LIT_CHARS awk]} {[LIT_CHARS -v]} {[SQ ]} {[SQ ] [VarSub BUCKET] [SQ ]} ) ) ) ) (FunctionDef build_all [] (If (Pipeline! (Com {[LIT_CHARS ./hack/make.sh]} {[DQ [VarSub RELEASE_BUNDLES bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_AT "@"}})]]} ) ) (List (Com {[LIT_CHARS echo]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS echo]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) (FunctionDef upload_release_build [] (List (= scope= flags=0 words=[] bindings=[('src', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('dst', {[DQ [VarSub 2]]})]) (= scope= flags=0 words=[] bindings=[('latest', {[DQ [VarSub 3]]})]) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Uploading "][VarSub src]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " to "][VarSub dst]]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --follow-symlinks]} {[LIT_CHARS --preserve]} {[LIT_CHARS --acl-public]} {[LIT_CHARS put]} {[DQ [VarSub src]]} {[DQ [VarSub dst]]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub latest]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Copying to "][VarSub latest]]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS cp]} {[DQ [VarSub dst]]} {[DQ [VarSub latest]]} ) ) ) (For hashAlgo [{[LIT_CHARS md5]}, {[LIT_CHARS sha256]}]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -e]} {[DQ [VarSub src][LIT_CHARS .][VarSub hashAlgo]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Uploading "][VarSub src][LIT_CHARS .][VarSub hashAlgo]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " to "][VarSub dst][LIT_CHARS .][VarSub hashAlgo]]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --follow-symlinks]} {[LIT_CHARS --preserve]} {[LIT_CHARS --acl-public]} {[LIT_CHARS --mime-type] [LIT_DBRACKET_LIKE "="] [SQ ]} {[LIT_CHARS put]} {[DQ [VarSub src][LIT_CHARS .][VarSub hashAlgo]]} {[DQ [VarSub dst][LIT_CHARS .][VarSub hashAlgo]]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub latest]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Copying to "][VarSub latest][LIT_CHARS .][VarSub hashAlgo]]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS cp]} {[DQ [VarSub dst][LIT_CHARS .][VarSub hashAlgo]]} {[DQ [VarSub latest][LIT_CHARS .][VarSub hashAlgo]]} ) ) ) ) ) ) ) ) (FunctionDef release_build [] (List (= scope= flags=0 words=[] bindings=[('GOOS', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('GOARCH', {[VarSub 2]})]) (= scope= flags=0 words=[] bindings=[('binDir', {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /cross/] [VarSub GOOS] [LIT_CHARS /] [VarSub GOARCH]})]) (= scope= flags=0 words=[] bindings=[('tgzDir', {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /tgz/] [VarSub GOOS] [LIT_CHARS /] [VarSub GOARCH]})]) (= scope= flags=0 words=[] bindings=[('binary', {[LIT_CHARS docker-] [VarSub VERSION]})]) (= scope= flags=0 words=[] bindings=[('tgz', {[LIT_CHARS docker-] [VarSub VERSION] [LIT_CHARS .tgz]})]) (= scope= flags=0 words=[] bindings=[('latestBase', {[SQ ]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -z]} {[DQ [VarSub NOLATEST]]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('latestBase', {[LIT_CHARS docker-latest]})]) ) (= scope= flags=0 words=[] bindings=[('s3Os', {[VarSub GOOS]})]) (Case to_match={[DQ [VarSub s3Os]]}, pat_word_list=[[{[LIT_CHARS darwin]}], [{[LIT_CHARS freebsd]}], [{[LIT_CHARS linux]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('s3Os', {[LIT_CHARS Darwin]})]) (= scope= flags=0 words=[] bindings=[('s3Os', {[LIT_CHARS FreeBSD]})]) (= scope= flags=0 words=[] bindings=[('s3Os', {[LIT_CHARS Linux]})]) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: can't convert "][VarSub s3Os][LIT_CHARS " to an appropriate value for 'uname -s'"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (= scope= flags=0 words=[] bindings=[('s3Arch', {[VarSub GOARCH]})]) (Case to_match={[DQ [VarSub s3Arch]]}, pat_word_list=[[{[LIT_CHARS amd64]}], [{[LIT_CHARS 386]}], [{[LIT_CHARS arm]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('s3Arch', {[LIT_CHARS x86_64]})]) (= scope= flags=0 words=[] bindings=[('s3Arch', {[LIT_CHARS i386]})]) (= scope= flags=0 words=[] bindings=[('s3Arch', {[LIT_CHARS armel]})]) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: can't convert "][VarSub s3Arch][LIT_CHARS " to an appropriate value for 'uname -m'"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (= scope= flags=0 words=[] bindings=[('s3Dir', {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /builds/] [VarSub s3Os] [LIT_CHARS /] [VarSub s3Arch]})]) (= scope= flags=0 words=[] bindings=[('latest', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('latestTgz', {[SQ ]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub latestBase]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('latest', {[DQ [VarSub s3Dir][LIT_CHARS /][VarSub latestBase]]})]) (= scope= flags=0 words=[] bindings=[('latestTgz', {[DQ [VarSub s3Dir][LIT_CHARS /][VarSub latestBase][LIT_CHARS .tgz]]})]) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -x]} {[DQ [VarSub binDir][LIT_CHARS /][VarSub binary]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: can't find "][VarSub binDir][LIT_CHARS /][VarSub binary][LIT_CHARS " - was it compiled properly?"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub tgzDir][LIT_CHARS /][VarSub tgz]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "error: can't find "][VarSub tgzDir][LIT_CHARS /][VarSub tgz][LIT_CHARS " - was it packaged properly?"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS upload_release_build]} {[DQ [VarSub binDir][LIT_CHARS /][VarSub binary]]} {[DQ [VarSub s3Dir][LIT_CHARS /][VarSub binary]]} {[DQ [VarSub latest]]} ) (Com {[LIT_CHARS upload_release_build]} {[DQ [VarSub tgzDir][LIT_CHARS /][VarSub tgz]]} {[DQ [VarSub s3Dir][LIT_CHARS /][VarSub tgz]]} {[DQ [VarSub latestTgz]]} ) ) ) (FunctionDef release_ubuntu [] (List (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -e]} {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /ubuntu]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS dpkg-sig]} {[LIT_CHARS -g]} {[DQ [LIT_CHARS "--passphrase "][VarSub GPG_PASSPHRASE]]} {[LIT_CHARS -k]} {[LIT_CHARS releasedocker]} {[LIT_CHARS --sign]} {[LIT_CHARS builder]} {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /ubuntu/] [LIT_OTHER "*"] [LIT_CHARS .deb]} ) (= scope= flags=0 words=[] bindings=[('APTDIR', {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /ubuntu/apt]})]) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub APTDIR] [LIT_CHARS /conf]} {[VarSub APTDIR] [LIT_CHARS /db]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS sync]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /ubuntu/db/]} {[VarSub APTDIR] [LIT_CHARS /db/]} ) (Com {[LIT_CHARS true]} ) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[VarSub APTDIR] [LIT_CHARS /conf/distributions]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "Codename: docker\n"][LIT_CHARS "Components: main\n"][LIT_CHARS "Architectures: amd64 i386\n"]]} 0), > ) (= scope= flags=0 words=[] bindings=[('DEBFILE', {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /ubuntu/lxc-docker] [LIT_OTHER "*"] [LIT_CHARS .deb]})]) (Com {[LIT_CHARS reprepro]} {[LIT_CHARS -b]} {[VarSub APTDIR]} {[LIT_CHARS includedeb]} {[LIT_CHARS docker]} {[VarSub DEBFILE]} ) (For F [{[ComSub (Com {[LIT_CHARS find]} {[VarSub APTDIR]} {[LIT_CHARS -name]} {[LIT_CHARS Release]})]}]) (Com {[LIT_CHARS gpg]} {[LIT_CHARS -u]} {[LIT_CHARS releasedocker]} {[LIT_CHARS --passphrase]} {[VarSub GPG_PASSPHRASE]} {[LIT_CHARS --armor]} {[LIT_CHARS --sign]} {[LIT_CHARS --detach-sign]} {[LIT_CHARS --output]} {[VarSub F] [LIT_CHARS .gpg]} {[VarSub F]} ) ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS sync]} {[VarSub HOME] [LIT_CHARS /.gnupg/]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /ubuntu/.gnupg/]} ) (Com {[LIT_CHARS gpg]} {[LIT_CHARS --armor]} {[LIT_CHARS --export]} {[LIT_CHARS releasedocker]} < (FilenameRedirectNode filename={[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /ubuntu/gpg]} "> 1), > ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS put]} {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /ubuntu/gpg]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /gpg]} ) (= scope= flags=0 words=[] bindings=[('gpgFingerprint', {[LIT_CHARS 36A1D7869245C8950F966E92D8576A8BA88D21E9]})]) (If (DBracket {B2 BINARY_STRING_EQUAL {[VarSub BUCKET]} {[LIT_CHARS test] [LIT_OTHER "*"]}}) (= scope= flags=0 words=[] bindings=[('gpgFingerprint', {[LIT_CHARS 740B314AE3941731B942C66ADF4FD13717AAD7D6]})]) ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS sync]} {[VarSub APTDIR] [LIT_CHARS /]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /ubuntu/]} ) (Pipeline (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "# Check that HTTPS transport is available to APT\n"][LIT_CHARS "if [ ! -e /usr/lib/apt/methods/https ]; then\n"][LIT_CHARS "\tapt-get update\n"][LIT_CHARS "\tapt-get install -y apt-transport-https\n"][LIT_CHARS "fi\n"][LIT_CHARS "\n"][LIT_CHARS "# Add the repository to your APT sources\n"][LIT_CHARS "echo deb "][ComSub (Com {[LIT_CHARS s3_url]})][LIT_CHARS "/ubuntu docker main > /etc/apt/sources.list.d/docker.list\n"][LIT_CHARS "\n"][LIT_CHARS "# Then import the repository key\n"][LIT_CHARS "apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys "][VarSub gpgFingerprint][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# Install docker\n"][LIT_CHARS "apt-get update\n"][LIT_CHARS "apt-get install -y lxc-docker\n"][LIT_CHARS "\n"][LIT_CHARS "#\n"][LIT_CHARS "# Alternatively, just use the curl-able install.sh script provided at "][ComSub (Com {[LIT_CHARS s3_url]})][LIT_CHARS "\n"][LIT_CHARS "#\n"]]} 0), > ) (Com {[LIT_CHARS write_to_s3]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /ubuntu/index]} ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS /tmp/emptyfile]} ) (Com {[LIT_CHARS touch]} {[LIT_CHARS /tmp/emptyfile]} ) ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS --add-header] [LIT_DBRACKET_LIKE "="] [SQ ]} {[LIT_CHARS --mime-type] [LIT_DBRACKET_LIKE "="] [SQ ]} {[LIT_CHARS put]} {[LIT_CHARS /tmp/emptyfile]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /ubuntu/info]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "APT repository uploaded. Instructions available at "][ComSub (Com {[LIT_CHARS s3_url]})][LIT_CHARS /ubuntu]]} ) ) ) (FunctionDef release_binaries [] (List (AndOr OP_OR_IF (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -e]} {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /cross/linux/amd64/docker-] [VarSub VERSION]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[SQ ]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (For d [{[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /cross/] [LIT_OTHER "*"] [LIT_CHARS /] [LIT_OTHER "*"]}]) (List (= scope= flags=0 words=[] bindings=[('GOARCH', {[DQ [ComSub (Com {[LIT_CHARS basename]} {[DQ [VarSub d]]})]]})]) (= scope= flags=0 words=[] bindings=[('GOOS', {[DQ [ComSub (Com {[LIT_CHARS basename]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub d]]})]]})]]})]) (Com {[LIT_CHARS release_build]} {[DQ [VarSub GOOS]]} {[DQ [VarSub GOARCH]]} ) ) ) (Pipeline (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "# To install, run the following command as root:\n"][LIT_CHARS "curl -sSL -O "][ComSub (Com {[LIT_CHARS s3_url]})][LIT_CHARS /builds/Linux/x86_64/docker-][VarSub VERSION][LIT_CHARS " && chmod +x docker-"][VarSub VERSION][LIT_CHARS " && sudo mv docker-"][VarSub VERSION][LIT_CHARS " /usr/local/bin/docker\n"][LIT_CHARS "# Then start docker in daemon mode:\n"][LIT_CHARS "sudo /usr/local/bin/docker -d\n"]]} 0), > ) (Com {[LIT_CHARS write_to_s3]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /builds/index]} ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[LIT_CHARS /tmp/emptyfile]} ) (Com {[LIT_CHARS touch]} {[LIT_CHARS /tmp/emptyfile]} ) ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS --add-header] [LIT_DBRACKET_LIKE "="] [SQ ]} {[LIT_CHARS --mime-type] [LIT_DBRACKET_LIKE "="] [SQ ]} {[LIT_CHARS put]} {[LIT_CHARS /tmp/emptyfile]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /builds/info]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -z]} {[DQ [VarSub NOLATEST]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Advertising "][VarSub VERSION][LIT_CHARS " on "][VarSub BUCKET][LIT_CHARS " as most recent version"]]} ) (Pipeline (Com {[LIT_CHARS echo]} {[VarSub VERSION]} ) (Com {[LIT_CHARS write_to_s3]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /latest]} ) ) ) ) ) ) (FunctionDef release_index [] (Pipeline (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS "s,url='https://get.docker.com/',url='"][ComSub (Com {[LIT_CHARS s3_url]})][LIT_CHARS "/',"]]} {[LIT_CHARS hack/install.sh]} ) (Com {[LIT_CHARS write_to_s3]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /index]} ) ) ) (FunctionDef release_test [] (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS bundles/][VarSub VERSION][LIT_CHARS /test]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS --acl-public]} {[LIT_CHARS sync]} {[LIT_CHARS bundles/] [VarSub VERSION] [LIT_CHARS /test/]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /test/]} ) ) ) (FunctionDef setup_gpg [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub HOME] [LIT_CHARS /.gnupg/]} ) (AndOr OP_OR_IF (Com {[LIT_CHARS s3cmd]} {[LIT_CHARS sync]} {[LIT_CHARS s3] [LIT_OTHER ":"] [LIT_CHARS //] [VarSub BUCKET] [LIT_CHARS /ubuntu/.gnupg/]} {[VarSub HOME] [LIT_CHARS /.gnupg/]} ) (Com {[LIT_CHARS true]} ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS gpg]} {[LIT_CHARS --list-keys]} {[LIT_CHARS releasedocker]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS gpg]} {[LIT_CHARS --gen-key]} {[LIT_CHARS --batch]} ) ) ) ) (FunctionDef main [] (List (Com {[LIT_CHARS build_all]} ) (Com {[LIT_CHARS setup_s3]} ) (Com {[LIT_CHARS setup_gpg]} ) (Com {[LIT_CHARS release_binaries]} ) (Com {[LIT_CHARS release_ubuntu]} ) (Com {[LIT_CHARS release_index]} ) (Com {[LIT_CHARS release_test]} ) ) ) (Com {[LIT_CHARS main]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Release complete; see "][ComSub (Com {[LIT_CHARS s3_url]})]]} ) (Com {[LIT_CHARS echo]} ) )