Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] authored and wojtekmach committed Sep 23, 2024
1 parent b2d3c9f commit 4972b43
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 24 deletions.
63 changes: 61 additions & 2 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,73 @@ jobs:
run: |
bash scripts/build_otp_macos.bash "${{ env.OTP_REF_NAME }}"
# - name: Set up Git credentials
# env:
# # This is a personal access token for user wojtekmach-erlef-bot that has write access.
# # We need a token with `workflows` permissions because by pushing git tags
# # (from upstream, erlang/otp) we're modifying workflow files (.github/workflows)
# # on those tags and that is restricted. Perhaps this would be not necessary if this repo
# # was a _fork_ of erlang/otp.
# GITHUB_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}
# run: |
# git config --global credential.helper store
# echo "https://x-access-token:${GITHUB_TOKEN}@github.com" > ~/.git-credentials

- name: "Upload"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "${OTP_REF_NAME}" = master ] || echo "${OTP_REF_NAME}" | grep -q "^maint"; then
ref_name="${OTP_REF_NAME}-latest"
else
ref_name="${OTP_REF_NAME}"
fi
# TODO:
# git remote add upstream https://github.com/erlang/otp
# git fetch upstream
# git tag $ref_name $OTP_REF --force
# git push origin $ref_name --force
if ! gh release view $ref_name; then
if ! echo "$REF_NAME" | grep -qE 'rc|maint|master'; then
if [ -f builds/macos-arm64.txt ]; then
latest_version=`cat builds/macos-arm64.txt | cut -d" " -f1 | grep OTP- | sed 's/OTP-//' | sort --reverse -V | head -1`
version=$(echo "$ref_name" | sed 's/OTP-//')
if [ $(printf "%s\n%s" "$latest_version" "$version" | sort --reverse -V | head -1) != "$latest_version" ]; then
latest="--latest"
else
latest="--latest=false"
fi
else
latest="--latest=false"
fi
else
latest="--latest=false"
fi
# Initial commit
target=b5893a3c3a8d0ab54be5d04de450b24d9e5aa149
gh release create \
--repo ${{ github.repository }} \
--title $ref_name \
--notes "Automated build for https://github.com/erlang/otp/tree/${OTP_REF_NAME}" \
--target $target \
$latest \
$ref_name
fi
tgz="$OTP_REF_NAME-macos-${{ matrix.pair.arch }}.tar.gz"
tar czf $tgz --cd $OTP_DIR .
gh release create $OTP_REF_NAME || true
gh release upload --clobber $OTP_REF_NAME $tgz
gh release upload \
--repo ${{ github.repository }} \
--clobber \
$ref_name \
$tgz
gh workflow run update_builds_txt.yaml \
--repo "${GITHUB_REPOSITORY}" \
--ref "${GITHUB_REF}" \
Expand Down
12 changes: 9 additions & 3 deletions .github/workflows/update_builds_txt.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,18 @@ jobs:
GIT_AUTHOR_EMAIL="${{ github.actor }}@users.noreply.github.com" \
GIT_COMMITTER_NAME="github-actions[bot]" \
GIT_COMMITTER_EMAIL="github-actions[bot]@users.noreply.github.com" \
git commit -m "Add ${{ env.OTP_REF_NAME }} to ${{ env.BUILDS_TXT }}"
git commit -m "${{ env.BUILDS_TXT }}: Add ${{ env.OTP_REF_NAME }}"
git push origin $target_branch
}
url="https://github.com/${GITHUB_REPOSITORY}/releases/download/${OTP_REF_NAME}/${TGZ}"
curl --fail -LO "${url}"
if [[ "${OTP_REF_NAME}" == master ]] || [[ "${OTP_REF_NAME}" == maint* ]]; then
ref_name="${OTP_REF_NAME}-latest"
else
ref_name="${OTP_REF_NAME}"
fi
url="https://github.com/${GITHUB_REPOSITORY}/releases/download/${ref_name}/${TGZ}"
echo downloading $url
curl -fsSLO "${url}"
max_retries=5
attempt=0
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/tmp
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,36 @@ Supported architectures:
* `amd64`
* `arm64`

The goal of these builds is to be as self-contained as possible. OpenSSL (used
by `crypto` app) and wxWidgets (used by `wx` app and it's dependants,
`observer`, `debugger`, and `et`) are statically linked.

## List of Builds

| Target | OpenSSL | wxWidgets |
| --------------------------- | ------- | ------------------------- |
| **OTP 25** | | |
| `macos-amd64` | 3.1.6 | N/A <sup>2</sup> |
| `macos-arm64` <sup>1</sup> | 3.1.6 | N/A <sup>2</sup> |
| **OTP 26** | | |
| `macos-amd64` | 3.1.6 | N/A <sup>2</sup> / 3.2.5 |
| `macos-arm64` | 3.1.6 | N/A <sup>2</sup> / 3.2.5 |
| **OTP 27** | | |
| `macos-amd64` | 3.1.6 | 3.2.5 |
| `macos-arm64` | 3.1.6 | 3.2.5 |
| **OTP maint** <sup>3</sup> | | |
| `macos-amd64` | 3.1.6 | 3.2.5 |
| `macos-arm64` | 3.1.6 | 3.2.5 |
| **OTP master** <sup>3</sup> | | |
| `macos-amd64` | 3.1.6 | 3.2.5 |
| `macos-arm64` | 3.1.6 | 3.2.5 |

<sup>1</sup> JIT is disabled on OTP 25 on macos-arm64.

<sup>2</sup> `wx`, `observer`, `debugger`, and `et` apps are only available since OTP 26.1.1.

<sup>3</sup> OTP maint and master builds are updated daily.

List of builds can be found here:

* `macos-amd64` - <https://github.com/erlef/otp_builds/raw/builds/macos-amd64.txt>
Expand Down
8 changes: 8 additions & 0 deletions builds/macos-amd64.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
OTP-25.0 4ed7957623e5ccbd420a09a506bd6bc9930fe93c 2024-09-23T12:33:08Z 5200889aff2b2998986db9ae42c059339ba28aae6dca034ba98d1d71ea0b6285
OTP-26.0 8c0ea6bd3306cfd6ca19730d180a2a93a716e1ee 2024-09-23T20:55:07Z 004e5323f1add1f9086a602e7ecbf96d77aa61344e430b4da6cf53a098d00e5b
OTP-27.0 601a012837ea0a5c8095bf24223132824177124d 2024-09-17T12:12:46Z 00da31f072aaf51e54c8969af1b68967e9b3836fe84fee8602b3f69f9f5033e6
OTP-27.0-rc3 5df3992d695da4d7e8777cf7605279ce9d131f1c 2024-09-19T20:37:41Z 304877513c3c03b93ac6ba78e9bcf25f0289673772c3778373a0b1a2d91efe17
OTP-27.0.1 ee9628e7ed09ef02e767994a6da5b7a225316aaa 2024-09-17T08:28:27Z f3adb7a52341fc20a8e886a851e18e251e5b88ff33a621c4651ff7e3f574f943
OTP-27.1 9ae2ef54fc6dacb5bfbe2dc6fc6f2522d57ce1fb 2024-09-18T13:28:34Z 2b425afca5fa1750361e4a96eb9d50fd6e1e42148c9cbb5fe28444de5c28e93d
maint 2ef18fe6b13c2c399f24bfc0f8af0fcb8c688ba5 2024-09-23T18:19:26Z fb562bd119ddb91c4af3eb302f8893c2dda566d00c68c3ba3c5ce24aed53dc5e
master 951d24a70523cda13695250a545ebd5284b29db0 2024-09-23T18:19:48Z a3b7deb0b89488006bab5c74b5e54e2857417563be3624b09ad96ca690231724
7 changes: 7 additions & 0 deletions builds/macos-arm64.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
OTP-25.0 4ed7957623e5ccbd420a09a506bd6bc9930fe93c 2024-09-23T12:26:37Z f94a74de35f41533d9d5b451a5b651ca789533869a846ced9c6011824a879f37
OTP-26.0 8c0ea6bd3306cfd6ca19730d180a2a93a716e1ee 2024-09-23T20:54:52Z 2bc4747564cf6ac06d24de145964485dec16de75d6180ee58740842d2534335b
OTP-27.0 601a012837ea0a5c8095bf24223132824177124d 2024-09-17T12:12:25Z 08a007a426baa6d693c84bcd3c43f9b4eec2037fd4583a31da3f936b694765d7
OTP-27.0-rc3 5df3992d695da4d7e8777cf7605279ce9d131f1c 2024-09-19T20:31:42Z df90b7feca41c22aa7612e1382050638c63d86211c4b95586deb1e9e43644090
OTP-27.0.1 ee9628e7ed09ef02e767994a6da5b7a225316aaa 2024-09-17T08:28:39Z 2eea6ca2baaf8fca2b6c5577231cf0c1fedf598cf2154e4ef40e0f1e6cfa34cb
maint 2ef18fe6b13c2c399f24bfc0f8af0fcb8c688ba5 2024-09-23T18:14:26Z 09e4a7632856f8cb23d642be29d3ffa0ee7a8a630b85410f6c3c13cdac198318
master 951d24a70523cda13695250a545ebd5284b29db0 2024-09-23T18:14:09Z db23aa8937d5e76a537a2cb6376d7b87037a9d307860b3553916cd15ddba3b01
80 changes: 61 additions & 19 deletions scripts/build_otp_macos.bash
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
set -euox pipefail
set -euo pipefail

main() {
if [ $# -ne 1 ]; then
Expand All @@ -11,16 +11,29 @@ EOF
fi

local ref_name=$1

case "$ref_name" in
OTP-25* | OTP-26.0* | OTP-26.1)
WXWIDGETS_VERSION=disabled
;;
*)
;;
esac

: "${BUILD_DIR:=$PWD/tmp/builds}"
: "${OPENSSL_VERSION:=3.1.6}"
: "${OPENSSL_DIR:=/tmp/builds/openssl-${OPENSSL_VERSION}-macos}"
: "${OPENSSL_DIR:=$BUILD_DIR/openssl-${OPENSSL_VERSION}-macos}"
: "${WXWIDGETS_VERSION:=3.2.6}"
: "${WXWIDGETS_DIR:=/tmp/builds/wxwidgets-${WXWIDGETS_VERSION}-macos}"
: "${OTP_DIR:=/tmp/builds/otp-${ref_name}-openssl-${OPENSSL_VERSION}-wxwidgets-${WXWIDGETS_VERSION}-macos}"
: "${WXWIDGETS_DIR:=$BUILD_DIR/wxwidgets-${WXWIDGETS_VERSION}-macos}"
: "${OTP_DIR:=$BUILD_DIR/otp-${ref_name}-openssl-${OPENSSL_VERSION}-wxwidgets-${WXWIDGETS_VERSION}-macos}"
export MAKEFLAGS=-j$(getconf _NPROCESSORS_ONLN)
export CFLAGS="-Os -fno-common -mmacosx-version-min=11.0"

build_openssl "${OPENSSL_VERSION}"
build_wxwidgets "${WXWIDGETS_VERSION}"

if [ "${WXWIDGETS_VERSION}" != disabled ]; then
build_wxwidgets "${WXWIDGETS_VERSION}"
fi

export PATH="${WXWIDGETS_DIR}/bin:$PATH"
build_otp "${ref_name}"
Expand All @@ -29,7 +42,7 @@ EOF
build_openssl() {
local version=$1
local rel_dir="${OPENSSL_DIR}"
local src_dir="/tmp/builds/src-openssl-${version}"
local src_dir="$BUILD_DIR/src-openssl-${version}"

if [ -d "${rel_dir}/bin" ]; then
echo "${rel_dir}/bin already exists, skipping build"
Expand Down Expand Up @@ -60,7 +73,7 @@ build_openssl() {
build_wxwidgets() {
local version=$1
local rel_dir="${WXWIDGETS_DIR}"
local src_dir="/tmp/builds/src-wxwidgets-${version}"
local src_dir="$BUILD_DIR/src-wxwidgets-${version}"

if [ -d "${rel_dir}/bin" ]; then
echo "${rel_dir}/bin already exists, skipping build"
Expand All @@ -69,7 +82,7 @@ build_wxwidgets() {
fi

if [ ! -d ${src_dir} ]; then
curl --fail -LO https://github.com/wxWidgets/wxWidgets/releases/download/v$version/wxWidgets-$version.tar.bz2
curl -fsSLO https://github.com/wxWidgets/wxWidgets/releases/download/v$version/wxWidgets-$version.tar.bz2
tar -xf wxWidgets-$version.tar.bz2
mv wxWidgets-$version $src_dir
rm wxWidgets-$version.tar.bz2
Expand All @@ -92,22 +105,32 @@ build_wxwidgets() {
fi
}

test_otp() {
erl -noshell -eval 'io:format("~s~s~n", [
erlang:system_info(system_version),
erlang:system_info(system_architecture)]),
ok = crypto:start(), io:format("crypto ok~n"),
halt().'

if [ "${WXWIDGETS_VERSION}" != disabled ]; then
erl -noshell -eval '
wx:new(), io:format("wx ok~n"),
halt().'
else
echo wx disabled
fi
}

build_otp() {
local ref_name="$1"
local rel_dir="${OTP_DIR}"
local src_dir="/tmp/builds/src-otp-${ref_name}"
local src_dir="$BUILD_DIR/src-otp-${ref_name}"
local wx_test

local test_cmd="erl -noshell -eval 'io:format(\"~s~s~n\", [
erlang:system_info(system_version),
erlang:system_info(system_architecture)]),
ok = crypto:start(), io:format(\"crypto ok~n\"),
wx:new(), io:format(\"wx ok~n\"),
halt().'"

if [ -d "${rel_dir}/bin" ]; then
echo "${rel_dir}/bin already exists, skipping build"
eval ${rel_dir}/bin/${test_cmd}
export PATH="${rel_dir}/bin:$PATH"
test_otp
return
fi

Expand All @@ -123,9 +146,27 @@ build_otp() {
export ERL_TOP=$PWD
export ERLC_USE_SERVER=true

if [ "$(uname -m)" = "arm64" ]; then
if echo "$ref_name" | grep -q "^OTP-25"; then
jit_flags="--disable-jit"
else
jit_flags=""
fi
else
jit_flags=""
fi

if [ "${WXWIDGETS_VERSION}" = disabled ]; then
wxwidgets_flags=--without-{wx,observer,debugger,et}
else
wxwidgets_flags=""
fi

./otp_build configure \
--with-ssl=${OPENSSL_DIR} \
--disable-dynamic-ssl-lib
--disable-dynamic-ssl-lib \
$jit_flags \
$wxwidgets_flags

./otp_build boot -a
./otp_build release -a ${rel_dir}
Expand All @@ -136,7 +177,8 @@ build_otp() {
rm Install
)

if ! eval ${rel_dir}/bin/erl ${test_cmd}; then
export PATH="${rel_dir}/bin:$PATH"
if ! test_otp; then
rm -rf ${rel_dir}
fi
}
Expand Down

0 comments on commit 4972b43

Please sign in to comment.