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 72551a4f8b3f..b34e4d4cb746 100644 --- a/Changelog.md +++ b/Changelog.md @@ -13,6 +13,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/docs/layout-of-source-files.rst b/docs/layout-of-source-files.rst index e51b3ad98eb4..e2c7a859a8d2 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. @@ -169,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: 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