From 2ad06a0b6e8190ed8e32feb0ec1a422dee4c19dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Fri, 10 Oct 2025 14:20:02 +0200 Subject: [PATCH 1/5] Discontinue support for Ubuntu PPAs --- .gitignore | 3 - Changelog.md | 1 + ReleaseChecklist.md | 18 --- docs/installing-solidity.rst | 20 +-- scripts/common.sh | 22 --- scripts/release_ppa.sh | 292 ----------------------------------- 6 files changed, 4 insertions(+), 352 deletions(-) delete mode 100755 scripts/release_ppa.sh diff --git a/.gitignore b/.gitignore index a9430fd98263..8d7ee768a75c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ /commit_hash.txt /prerelease.txt -# Auth config for ppa release -/.release_ppa_auth - # Compiled Object files *.slo *.lo diff --git a/Changelog.md b/Changelog.md index f772f6dd8b48..fa85e3e54889 100644 --- a/Changelog.md +++ b/Changelog.md @@ -12,6 +12,7 @@ Bugfixes: Build System: * Enable Linux arm64 binaries for testing and releases. +* Ubuntu PPA Packages: Discontinue the PPA as a binary distribution channel. * Update minimum version requirements of Boost to 1.83.0 for non-windows builds and of GCC and Clang to 13.3 and 18.1.3, respectively. Fixes infinite recursion on `boost::rational` comparison affecting compiler binaries built with GCC<14.0 and Boost<1.75. ### 0.8.30 (2025-05-07) diff --git a/ReleaseChecklist.md b/ReleaseChecklist.md index d8d63b09ae9a..4eada5f65e7d 100644 --- a/ReleaseChecklist.md +++ b/ReleaseChecklist.md @@ -4,10 +4,7 @@ - [ ] GitHub account with access to [solidity](https://github.com/argotorg/solidity), [solc-js](https://github.com/argotorg/solc-js), [solc-bin](https://github.com/argotorg/solc-bin), [solidity-website](https://github.com/argotorg/solidity-website). - [ ] DockerHub account with push rights to the [`solc` image](https://hub.docker.com/r/ethereum/solc). -- [ ] Launchpad (Ubuntu One) account with a membership in the ["Ethereum" team](https://launchpad.net/~ethereum) and - a gnupg key for your email in the `ethereum.org` domain (has to be version 1, gpg2 won't work). - [ ] Ubuntu/Debian dependencies of the Docker script: `docker-buildx`. -- [ ] Ubuntu/Debian dependencies of the PPA scripts: `devscripts`, `debhelper`, `dput`, `git`, `wget`, `ca-certificates`. - [ ] [npm Registry](https://www.npmjs.com) account added as a collaborator for the [`solc` package](https://www.npmjs.com/package/solc). - [ ] Access to the [solidity_lang Twitter account](https://twitter.com/solidity_lang). - [ ] [Reddit](https://www.reddit.com) account that is at least 10 days old with a minimum of 20 comment karma (`/r/ethereum` requirements). @@ -24,8 +21,6 @@ At least a day before the release: - [ ] Rerun CI on the top commits of main branches in all repositories that do not have daily activity by creating a test branch or PR: - [ ] `solc-js` - [ ] `solc-bin` (make sure the bytecode comparison check did run) -- [ ] (Optional) Create a prerelease in our Ubuntu PPA by following the steps in the PPA section below on `develop` rather than on a tag. - This is recommended especially when dealing with PPA for the first time, when we add a new Ubuntu version or when the PPA scripts were modified in this release cycle. - [ ] Verify that the release tarball of `solc-js` works. Bump version locally, add `soljson.js` from CI, build it, compare the file structure with the previous version, install it locally and try to use it. - [ ] Review [Learning from Past Releases](https://notes.argot.org/@solidity-release-mistakes) to make sure you don't repeat the same mistakes. @@ -82,19 +77,6 @@ At least a day before the release: - [ ] Make sure `docker-buildx` is installed. - [ ] Run `./scripts/docker_deploy_manual.sh v$VERSION`. -### PPA -- [ ] Create `.release_ppa_auth` at the root of your local Solidity checkout and set `LAUNCHPAD_EMAIL` and `LAUNCHPAD_KEYID` to your key's email and key id. -- [ ] Double-check that the `DISTRIBUTIONS` list in `scripts/release_ppa.sh` contains the most recent versions of Ubuntu. -- [ ] Run `scripts/release_ppa.sh v$VERSION` to create the PPA release. - This will create a single package containing static binary for older Ubuntu versions in the [`~ethereum/ethereum-static` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum-static) - and separate packages with dynamically-linked binaries for recent versions (those listed in `DISTRIBUTIONS`) in the [`~ethereum/ethereum` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum). -- [ ] Wait for the build to be finished and published for *all architectures* (currently we only build for `amd64`, but we may add `arm` in the future). - **SERIOUSLY: DO NOT PROCEED EARLIER!!!** -- [ ] *After* the package with the static build is *published*, use it to create packages for older Ubuntu versions. - Copy the static package to the [`~ethereum/ethereum` PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum) - for the destination series `Trusty`, `Xenial`, `Bionic`, and `Focal` - while selecting `Copy existing binaries`. - ### Release solc-js - [ ] Wait until solc-bin was properly deployed. You can test this via remix - a test run through remix is advisable anyway. - [ ] Increment the version number, create a pull request for that, merge it after tests succeeded. diff --git a/docs/installing-solidity.rst b/docs/installing-solidity.rst index bda0d102bfdd..01a2f382045b 100644 --- a/docs/installing-solidity.rst +++ b/docs/installing-solidity.rst @@ -116,23 +116,9 @@ Linux Packages Binary packages of Solidity are available at `solidity/releases `_. -We also have PPAs for Ubuntu, you can get the latest stable -version using the following commands: - -.. code-block:: bash - - sudo add-apt-repository ppa:ethereum/ethereum - sudo apt-get update - sudo apt-get install solc - -The nightly version can be installed using these commands: - -.. code-block:: bash - - sudo add-apt-repository ppa:ethereum/ethereum - sudo add-apt-repository ppa:ethereum/ethereum-dev - sudo apt-get update - sudo apt-get install solc +Ubuntu packages for versions up to 0.8.30 are available in the +`ethereum/ethereum PPA `_. +However, we have discontinued this distribution method and future versions will not be added there. Furthermore, some Linux distributions provide their own packages. These packages are not directly maintained by us but usually kept up-to-date by the respective package maintainers. diff --git a/scripts/common.sh b/scripts/common.sh index 0ca602ee6a60..a25fe5a82444 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -40,28 +40,6 @@ else function printLog { echo -e "$(tput setaf 3)$1$(tput sgr0)"; } fi -function checkDputEntries -{ - local pattern="$1" - grep "${pattern}" /etc/dput.cf --quiet || \ - fail "Error: Missing ${pattern//\\/} section in /etc/dput.cf (check top comment in release_ppa.sh for more information)." -} - -function sourcePPAConfig -{ - [[ "$LAUNCHPAD_KEYID" == "" && "$LAUNCHPAD_EMAIL" == "" ]] || fail - - # source keyid and email from .release_ppa_auth - if [[ -e .release_ppa_auth ]] - then - # shellcheck source=/dev/null - source "${REPO_ROOT}/.release_ppa_auth" - fi - - [[ "$LAUNCHPAD_KEYID" != "" && "$LAUNCHPAD_EMAIL" != "" ]] || \ - fail "Error: Couldn't find variables \$LAUNCHPAD_KEYID or \$LAUNCHPAD_EMAIL in sourced file .release_ppa_auth (check top comment in $0 for more information)." -} - function printStackTrace { printWarning "" diff --git a/scripts/release_ppa.sh b/scripts/release_ppa.sh deleted file mode 100755 index 6c1fd51dbfcc..000000000000 --- a/scripts/release_ppa.sh +++ /dev/null @@ -1,292 +0,0 @@ -#!/usr/bin/env bash -############################################################################## -## This is used to package .deb packages and upload them to the launchpad -## ppa servers for building. -## -## You can pass a branch name as argument to this script (which, if no argument is given, -## will default to "develop"). -## -## If the given branch matches a release version tag, the resulting package will be uploaded to -## ethereum/ethereum PPA, or ethereum/ethereum-dev PPA otherwise. -## -## It will clone the Solidity git from github, determine the version, -## create a source archive and push it to the ubuntu ppa servers. -## -## To interact with launchpad, you need to set the variables $LAUNCHPAD_EMAIL -## and $LAUNCHPAD_KEYID in the file .release_ppa_auth in the root directory of -## the project to your launchpad email and pgp keyid. -## This could for example look like this: -## -## LAUNCHPAD_EMAIL=your-launchpad-email@ethereum.org -## LAUNCHPAD_KEYID=123ABCFFFFFFFF -## -## Additionally the following entries in /etc/dput.cf are required: -## -## [ethereum-dev] -## fqdn = ppa.launchpad.net -## method = ftp -## incoming = ~ethereum/ethereum-dev -## login = anonymous -## -## [ethereum] -## fqdn = ppa.launchpad.net -## method = ftp -## incoming = ~ethereum/ethereum -## login = anonymous -## -## [ethereum-static] -## fqdn = ppa.launchpad.net -## method = ftp -## incoming = ~ethereum/ethereum-static -## login = anonymous -## -############################################################################## - -set -e - - -REPO_ROOT="$(dirname "$0")/.." - -# shellcheck source=scripts/common.sh -source "${REPO_ROOT}/scripts/common.sh" - -if [ -z "$1" ] -then - branch=develop -else - branch=$1 -fi - -is_release() { - [[ "${branch}" =~ ^v[0-9]+(\.[0-9]+)*$ ]] -} - -sourcePPAConfig - -packagename=solc - -# This needs to be a still active release -static_build_distribution=noble - -DISTRIBUTIONS="jammy noble oracular plucky" - -if is_release -then - DISTRIBUTIONS="$DISTRIBUTIONS STATIC" - - # Sanity checks - checkDputEntries "\[ethereum\]" - checkDputEntries "\[ethereum-static\]" -else - # Sanity check - checkDputEntries "\[ethereum-dev\]" -fi - -for distribution in $DISTRIBUTIONS -do -cd /tmp/ -rm -rf "$distribution" -mkdir "$distribution" -cd "$distribution" - -if [ "$distribution" = STATIC ] -then - pparepo=ethereum-static - CMAKE_OPTIONS="-DSOLC_LINK_STATIC=On -DCMAKE_EXE_LINKER_FLAGS=-static" -else - if is_release - then - pparepo=ethereum - else - pparepo=ethereum-dev - fi - CMAKE_OPTIONS="" -fi -ppafilesurl=https://launchpad.net/~ethereum/+archive/ubuntu/${pparepo}/+files - -# Fetch source -git clone --depth 2 --recursive https://github.com/argotorg/solidity.git -b "$branch" -mv solidity solc - -# Determine version -cd solc -version=$("$(dirname "$0")/get_version.sh") -commithash=$(git rev-parse --short=8 HEAD) -commitdate=$(git show --format=%ci HEAD | head -n 1 | cut - -b1-10 | sed -e 's/-0?/./' | sed -e 's/-0?/./') - -echo "$commithash" > commit_hash.txt -if is_release -then - debversion="$version" - echo -n > prerelease.txt # proper release -else - debversion="$version~develop-$commitdate-$commithash" -fi - -# gzip will create different tars all the time and we are not allowed -# to upload the same file twice with different contents, so we only -# create it once. -if [ ! -e "/tmp/${packagename}_${debversion}.orig.tar.gz" ] -then - tar --exclude .git -czf "/tmp/${packagename}_${debversion}.orig.tar.gz" . -fi -cp "/tmp/${packagename}_${debversion}.orig.tar.gz" ../ - -# Create debian package information - -mkdir debian -echo 9 > debian/compat -cat < debian/control -Source: solc -Section: science -Priority: extra -Maintainer: Christian (Buildserver key) -Build-Depends: debhelper (>= 9.0.0), - cmake, - g++ (>= 5.0), - git, - libgmp-dev, - libboost-all-dev, - automake, - libtool, - scons -Standards-Version: 3.9.5 -Homepage: https://ethereum.org -Vcs-Git: https://github.com/argotorg/solidity.git -Vcs-Browser: https://github.com/argotorg/solidity - -Package: solc -Architecture: any-amd64 -Multi-Arch: same -Depends: \${shlibs:Depends}, \${misc:Depends} -Conflicts: libethereum (<= 1.2.9) -Description: Solidity compiler. - The commandline interface to the Solidity smart contract compiler. -EOF -cat < debian/rules -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. -# -# Modified to make a template file for a multi-binary package with separated -# build-arch and build-indep targets by Bill Allombert 2001 - -# Uncomment this to turn on verbose mode. -export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS - - -%: - dh \$@ --buildsystem=cmake #--with sphinxdoc - -override_dh_auto_test: - -#override_dh_installdocs: -# make -C docs html -# dh_installdocs docs/_build/html - -override_dh_shlibdeps: - dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info - -override_dh_auto_configure: - dh_auto_configure -- -DTESTS=OFF -DFETCHCONTENT_FULLY_DISCONNECTED=OFF ${CMAKE_OPTIONS} -EOF -cat < debian/copyright -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: solc -Source: https://github.com/argotorg/solidity - -Files: * -Copyright: 2014-2016 Ethereum -License: GPL-3.0+ - -Files: debian/* -Copyright: 2016 Ethereum -License: GPL-3.0+ - -License: GPL-3.0+ - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - . - This package is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - . - You should have received a copy of the GNU General Public License - along with this program. If not, see . - . - On Debian systems, the complete text of the GNU General - Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". -EOF -cat < debian/changelog -solc (0.0.1-0ubuntu1) saucy; urgency=low - - * Initial release. - - -- Christian Mon, 03 Feb 2016 14:50:20 +0000 -EOF -echo docs > debian/docs -mkdir debian/source -echo "3.0 (quilt)" > debian/source/format -chmod +x debian/rules - -versionsuffix=0ubuntu1~${distribution} -# bump version / add entry to changelog -EMAIL="$LAUNCHPAD_EMAIL" dch -v "1:${debversion}-${versionsuffix}" "git build of ${commithash}" - - -# build source package -# If packages is rejected because original source is already present, add -# -sd to remove it from the .changes file -# -d disables the build dependencies check -debuild -S -d -sa -us -uc - -# prepare .changes file for Launchpad -if [ "$distribution" = STATIC ] -then - sed -i -e "s/UNRELEASED/${static_build_distribution}/" -e s/urgency=medium/urgency=low/ ../*.changes -else - sed -i -e "s/UNRELEASED/${distribution}/" -e s/urgency=medium/urgency=low/ ../*.changes -fi - -# check if ubuntu already has the source tarball -( -cd .. -orig="${packagename}_${debversion}.orig.tar.gz" -# shellcheck disable=SC2012 -orig_size=$(ls -l "$orig" | cut -d ' ' -f 5) -orig_sha1=$(sha1sum "$orig" | cut -d ' ' -f 1) -orig_sha256=$(sha256sum "$orig" | cut -d ' ' -f 1) -orig_md5=$(md5sum "$orig" | cut -d ' ' -f 1) - -if wget --quiet -O "$orig-tmp" "$ppafilesurl/$orig" -then - echo "[WARN] Original tarball found in Ubuntu archive, using it instead" - mv "$orig-tmp" "$orig" - # shellcheck disable=SC2012 - new_size=$(ls -l ./*.orig.tar.gz | cut -d ' ' -f 5) - new_sha1=$(sha1sum "$orig" | cut -d ' ' -f 1) - new_sha256=$(sha256sum "$orig" | cut -d ' ' -f 1) - new_md5=$(md5sum "$orig" | cut -d ' ' -f 1) - sed -i -e "s,$orig_sha1,$new_sha1,g" -e "s,$orig_sha256,$new_sha256,g" -e "s,$orig_size,$new_size,g" -e "s,$orig_md5,$new_md5,g" ./*.dsc - sed -i -e "s,$orig_sha1,$new_sha1,g" -e "s,$orig_sha256,$new_sha256,g" -e "s,$orig_size,$new_size,g" -e "s,$orig_md5,$new_md5,g" ./*.changes -fi -) - -# sign the package -debsign --re-sign -k "${LAUNCHPAD_KEYID}" "../${packagename}_${debversion}-${versionsuffix}_source.changes" - -# upload -dput "${pparepo}" "../${packagename}_${debversion}-${versionsuffix}_source.changes" - -done From 752afaf107287a9021a72877824de418eb0e5760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Tue, 2 Dec 2025 19:37:52 +0100 Subject: [PATCH 2/5] Docs: Remove outdated paragraph about installing a solver being required for SMTChecker pragmas --- docs/layout-of-source-files.rst | 9 --------- 1 file changed, 9 deletions(-) diff --git a/docs/layout-of-source-files.rst b/docs/layout-of-source-files.rst index e51b3ad98eb4..58b38400fe17 100644 --- a/docs/layout-of-source-files.rst +++ b/docs/layout-of-source-files.rst @@ -153,15 +153,6 @@ since Solidity 0.7.4. SMTChecker ~~~~~~~~~~ -This component has to be enabled when the Solidity compiler is built -and therefore it is not available in all Solidity binaries. -The :ref:`build instructions` explain how to activate this option. -It is activated for the Ubuntu PPA releases in most versions, -but not for the Docker images, Windows binaries or the -statically-built Linux binaries. It can be activated for solc-js via the -`smtCallback `_ if you have an SMT solver -installed locally and run solc-js via node (not via the browser). - If you use ``pragma experimental SMTChecker;``, then you get additional :ref:`safety warnings` which are obtained by querying an SMT solver. From c990bc71c14c045dfead93ae6db93f93608b2aae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Tue, 2 Dec 2025 19:38:35 +0100 Subject: [PATCH 3/5] Docs: Deprecation note for SMTChecker pragma --- docs/layout-of-source-files.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/layout-of-source-files.rst b/docs/layout-of-source-files.rst index 58b38400fe17..e2c7a859a8d2 100644 --- a/docs/layout-of-source-files.rst +++ b/docs/layout-of-source-files.rst @@ -160,6 +160,11 @@ The component does not yet support all features of the Solidity language and likely outputs many warnings. In case it reports unsupported features, the analysis may not be fully sound. +.. note:: + + The ``SMTChecker`` pragma is deprecated and will be removed. + To enable SMTChecker, simply select :ref:`select an engine` when invoking the compiler. + .. index:: source file, ! import, module, source unit .. _import: From aafaed250b3c2ee7876e9695f3f47fc2ff4182d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Fri, 10 Oct 2025 20:45:01 +0200 Subject: [PATCH 4/5] Reword docs about linux packages and add info about Nix --- docs/installing-solidity.rst | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/installing-solidity.rst b/docs/installing-solidity.rst index 01a2f382045b..1e0d44df82e2 100644 --- a/docs/installing-solidity.rst +++ b/docs/installing-solidity.rst @@ -113,23 +113,29 @@ self-contained (i.e. it does not refer to any external files that would have to Linux Packages ============== -Binary packages of Solidity are available at -`solidity/releases `_. +We provide :ref:`standalone binaries ` of the compiler that should run on most +distributions without any additional installation steps. + +Some Linux distributions provide their own packages. +These packages are not directly maintained by us but usually kept up-to-date by the respective +package maintainers. Ubuntu packages for versions up to 0.8.30 are available in the `ethereum/ethereum PPA `_. However, we have discontinued this distribution method and future versions will not be added there. -Furthermore, some Linux distributions provide their own packages. These packages are not directly -maintained by us but usually kept up-to-date by the respective package maintainers. - -For example, Arch Linux has packages for the latest development version as AUR packages: `solidity `_ -and `solidity-bin `_. +Arch Linux provides a script for building and installing the latest release version in its AUR +repository: `solidity `_. +Alternatively, one can also install official binaries using the +`solidity-bin `_ script. .. note:: Please be aware that `AUR `_ packages - are user-produced content and unofficial packages. Exercise caution when using them. + are produced and maintained by users and not vetted in any way by the distro maintainers. + Exercise caution when using them. + +On Nix, unofficial builds are available via `solc.nix `_. There is also a `snap package `_, however, it is **currently unmaintained**. It is installable in all the `supported Linux distros `_. To @@ -192,6 +198,8 @@ Install it using ``brew``: # eg. Install 0.4.8 brew install solidity.rb +.. _static-binaries: + Static Binaries =============== From e8cc9f8b0aaf9174571398c47ee88b0f02212ba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20=C5=9Aliwak?= Date: Fri, 10 Oct 2025 15:20:59 +0200 Subject: [PATCH 5/5] Discontinue official Docker images of Solidity --- .circleci/config.yml | 19 -------- Changelog.md | 1 + ReleaseChecklist.md | 6 --- docs/installing-solidity.rst | 44 +++---------------- scripts/Dockerfile | 38 ---------------- scripts/Dockerfile_alpine | 6 --- scripts/docker_deploy_manual.sh | 78 --------------------------------- 7 files changed, 8 insertions(+), 184 deletions(-) delete mode 100644 scripts/Dockerfile delete mode 100644 scripts/Dockerfile_alpine delete mode 100755 scripts/docker_deploy_manual.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 1bb787062772..0742d0d01e93 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1923,22 +1923,6 @@ jobs: - matrix_notify_failure_unless_pr - matrix_notify_release_unless_pr - b_alpine_docker: - <<: *base_cimg_small - steps: - - setup_remote_docker: - # Always build from scratch to use current packages. - # This job is only meant to run nightly so build time is not an issue. - docker_layer_caching: false - - checkout - - run: - name: Build and tag the container - command: scripts/docker_deploy_manual.sh develop "file://$PWD" --no-push - - run: - name: Smoke test - command: docker run --pull=never ghcr.io/argotorg/solc:build-alpine --version - - matrix_notify_failure_unless_pr - workflows: version: 2 @@ -2132,9 +2116,6 @@ workflows: - b_ubu: *requires_nothing - t_ubu_soltest_deprecated_evm_versions: *requires_b_ubu - # Build in a Docker container (on Alpine Linux) - - b_alpine_docker: *requires_nothing - nightly-ossfuzz: triggers: diff --git a/Changelog.md b/Changelog.md index fa85e3e54889..4fb0a5b740b7 100644 --- a/Changelog.md +++ b/Changelog.md @@ -11,6 +11,7 @@ Bugfixes: * Yul Optimizer: Fix edge case in which invalid Yul code is produced by ExpressionSimplifier due to expressions being substituted that contain out-of-scope variables. Build System: +* Docker: Discontinue DockerHub as a binary distribution channel. * Enable Linux arm64 binaries for testing and releases. * Ubuntu PPA Packages: Discontinue the PPA as a binary distribution channel. * Update minimum version requirements of Boost to 1.83.0 for non-windows builds and of GCC and Clang to 13.3 and 18.1.3, respectively. Fixes infinite recursion on `boost::rational` comparison affecting compiler binaries built with GCC<14.0 and Boost<1.75. diff --git a/ReleaseChecklist.md b/ReleaseChecklist.md index 4eada5f65e7d..818c8c0bd797 100644 --- a/ReleaseChecklist.md +++ b/ReleaseChecklist.md @@ -3,8 +3,6 @@ ## Requirements - [ ] GitHub account with access to [solidity](https://github.com/argotorg/solidity), [solc-js](https://github.com/argotorg/solc-js), [solc-bin](https://github.com/argotorg/solc-bin), [solidity-website](https://github.com/argotorg/solidity-website). -- [ ] DockerHub account with push rights to the [`solc` image](https://hub.docker.com/r/ethereum/solc). -- [ ] Ubuntu/Debian dependencies of the Docker script: `docker-buildx`. - [ ] [npm Registry](https://www.npmjs.com) account added as a collaborator for the [`solc` package](https://www.npmjs.com/package/solc). - [ ] Access to the [solidity_lang Twitter account](https://twitter.com/solidity_lang). - [ ] [Reddit](https://www.reddit.com) account that is at least 10 days old with a minimum of 20 comment karma (`/r/ethereum` requirements). @@ -73,10 +71,6 @@ At least a day before the release: ### Homebrew and MacOS - [ ] Update the version and the hash (`sha256sum solidity_$VERSION.tar.gz`) in the [`solidity` formula in Homebrew core repository](https://github.com/Homebrew/homebrew-core/blob/master/Formula/s/solidity.rb). -### Docker -- [ ] Make sure `docker-buildx` is installed. -- [ ] Run `./scripts/docker_deploy_manual.sh v$VERSION`. - ### Release solc-js - [ ] Wait until solc-bin was properly deployed. You can test this via remix - a test run through remix is advisable anyway. - [ ] Increment the version number, create a pull request for that, merge it after tests succeeded. diff --git a/docs/installing-solidity.rst b/docs/installing-solidity.rst index 1e0d44df82e2..1b49344ae4fa 100644 --- a/docs/installing-solidity.rst +++ b/docs/installing-solidity.rst @@ -71,44 +71,14 @@ Please refer to the solc-js repository for instructions. Docker ====== -Docker images of Solidity builds are available using the `solc `_ image from the argotorg organization on ghcr.io. -Use the ``stable`` tag for the latest released version, and ``nightly`` for potentially unstable changes in the ``develop`` branch. - -The Docker image runs the compiler executable so that you can pass all compiler arguments to it. -For example, the command below pulls the stable version of the ``solc`` image (if you do not have it already), -and runs it in a new container, passing the ``--help`` argument. - -.. code-block:: bash - - docker run ghcr.io/argotorg/solc:stable --help - -.. note:: - - Specific compiler versions are supported as the Docker image tag such as ``ghcr.io/argotorg/solc:0.8.23``. - We will be passing the ``stable`` tag here instead of specific version tag to ensure that users get - the latest version by default and avoid the issue of an out-of-date version. - -To use the Docker image to compile Solidity files on the host machine, mount a -local folder for input and output, and specify the contract to compile. For example: - -.. code-block:: bash - - docker run \ - --volume "/tmp/some/local/path/:/sources/" \ - ghcr.io/argotorg/solc:stable \ - /sources/Contract.sol \ - --abi \ - --bin \ - --output-dir /sources/output/ - -You can also use the standard JSON interface (which is recommended when using the compiler with tooling). -When using this interface, it is not necessary to mount any directories as long as the JSON input is -self-contained (i.e. it does not refer to any external files that would have to be -:ref:`loaded by the import callback `). - -.. code-block:: bash +Docker images containing Solidity builds up to version 0.8.31 are available in Github's container +registry as `solc `_ under the ``argotorg`` organization. +However, we have discontinued this distribution method and future versions will not be added there. - docker run ghcr.io/argotorg/solc:stable --standard-json < input.json > output.json +The images contain only a statically-linked compiler binary and were provided merely for convenience, +as a way to download and manage multiple versions using Docker. +On systems with Docker already installed this made it possible to use any version of the +compiler with a simple ``docker run ethereum/solc:`` command. Linux Packages ============== diff --git a/scripts/Dockerfile b/scripts/Dockerfile deleted file mode 100644 index fa9f65b6f464..000000000000 --- a/scripts/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -FROM alpine AS build - -#Establish working directory as solidity -WORKDIR /solidity - -# Build dependencies -RUN apk update && apk add boost-dev boost-static build-base cmake git clang - -#Copy working directory to the image -COPY . /solidity - -# Number of parallel jobs during build -# or 0 for auto-computing (max(1, CPU_core_count * 2/3), a greedy value) -ARG BUILD_CONCURRENCY="0" - -#Install dependencies, eliminate annoying warnings -RUN sed -i -E -e 's/include /include /' /usr/include/boost/asio/detail/socket_types.hpp -RUN cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DTESTS=0 -DSOLC_LINK_STATIC=1 -RUN make solc \ - -j$(awk "BEGIN { \ - if (${BUILD_CONCURRENCY} != 0) { \ - print(${BUILD_CONCURRENCY}); \ - } else { \ - x=($(grep -c ^processor /proc/cpuinfo) * 2/3); \ - if (x > 1) { \ - printf(\"%d\n\", x); \ - } else { \ - print(1); \ - } \ - } \ - }") -RUN strip solc/solc - -FROM scratch -LABEL org.opencontainers.image.source=https://github.com/argotorg/solidity -LABEL maintainer="Solidity Team " -COPY --from=build /solidity/solc/solc /usr/bin/solc -ENTRYPOINT ["/usr/bin/solc"] diff --git a/scripts/Dockerfile_alpine b/scripts/Dockerfile_alpine deleted file mode 100644 index 8db45d102462..000000000000 --- a/scripts/Dockerfile_alpine +++ /dev/null @@ -1,6 +0,0 @@ -FROM alpine -LABEL org.opencontainers.image.source=https://github.com/argotorg/solidity -LABEL maintainer="Solidity Team " - -COPY upload/solc-static-linux /usr/local/bin/solc -ENTRYPOINT ["/usr/local/bin/solc"] diff --git a/scripts/docker_deploy_manual.sh b/scripts/docker_deploy_manual.sh deleted file mode 100755 index c17119ce0896..000000000000 --- a/scripts/docker_deploy_manual.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env bash - -set -e - -REPO_ROOT="$(dirname "$0")/.." -# shellcheck source=scripts/common.sh -source "${REPO_ROOT}/scripts/common.sh" - -image="ghcr.io/argotorg/solc" - -if (( $# < 1 || $# > 3 )); then - fail "Usage: $0 [repo URL] [--no-push]" -fi - -branch="$1" -repo_url="${2:-https://github.com/argotorg/solidity.git}" - -if (( $# >= 3 )); then - [[ $3 == --no-push ]] || fail "Invalid flag: $3. Expected --no-push." - publish=false -else - publish=true -fi - -# NOTE: Login to GHCR before running this script with a PAT: -# echo $GHCR_TOKEN | docker login ghcr.io -u USERNAME --password-stdin -# -# Create a classic PAT with write:packages scope only visiting the following url: -# https://github.com/settings/tokens/new?scopes=write:packages - -DIR=$(mktemp -d) -( -cd "$DIR" - -git clone --recursive --depth 2 "$repo_url" -b "$branch" solidity -cd solidity -commithash=$(git rev-parse --short=8 HEAD) -echo -n "$commithash" > commit_hash.txt -version=$("$(dirname "$0")/get_version.sh") -if [ "$branch" = v"$version" ] -then - echo -n > prerelease.txt -else - date -u +"nightly.%Y.%-m.%-d" > prerelease.txt -fi - -function tag_and_push -{ - docker tag "$image:$1" "$image:$2" - [[ $publish == false ]] || docker push "$image:$2" -} - -rm -rf .git -docker buildx build -t "$image":build -f scripts/Dockerfile . --progress=plain -tmp_container=$(docker create "$image":build sh) - -# Alpine image -mkdir -p upload -docker cp "${tmp_container}":/usr/bin/solc upload/solc-static-linux -docker buildx build -t "$image":build-alpine -f scripts/Dockerfile_alpine . --progress=plain - -if [ "$branch" = "develop" ] -then - tag_and_push build nightly - tag_and_push build nightly-"$version"-"$commithash" - tag_and_push build-alpine nightly-alpine - tag_and_push build-alpine nightly-alpine-"$version"-"$commithash" -elif [ "$branch" = v"$version" ] -then - tag_and_push build stable - tag_and_push build "$version" - tag_and_push build-alpine stable-alpine - tag_and_push build-alpine "$version"-alpine -else - echo "Not publishing docker image from branch or tag $branch" -fi -) -rm -rf "$DIR"