diff --git a/lib/ash_hq/blog/resources/post/post.ex b/lib/ash_hq/blog/resources/post/post.ex index 50a4e58..c1dfad0 100644 --- a/lib/ash_hq/blog/resources/post/post.ex +++ b/lib/ash_hq/blog/resources/post/post.ex @@ -29,6 +29,8 @@ defmodule AshHq.Blog.Post do read :published do argument :tag, :ci_string + prepare build(sort: [created_at: :desc]) + filter expr( state == :published and if is_nil(^arg(:tag)) do diff --git a/mix.lock b/mix.lock index 18d62d3..fcc0bb3 100644 --- a/mix.lock +++ b/mix.lock @@ -7,7 +7,7 @@ "ash": {:hex, :ash, "3.4.8", "8c35c1e401044d05474c0e1a3209c74afb7ac955243085489242cade24d31906", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ecto, "~> 3.7", [hex: :ecto, repo: "hexpm", optional: false]}, {:ets, "~> 0.8", [hex: :ets, repo: "hexpm", optional: false]}, {:igniter, ">= 0.3.11 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: false]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: false]}, {:owl, "~> 0.11", [hex: :owl, repo: "hexpm", optional: false]}, {:picosat_elixir, "~> 0.2", [hex: :picosat_elixir, repo: "hexpm", optional: true]}, {:plug, ">= 0.0.0", [hex: :plug, repo: "hexpm", optional: true]}, {:reactor, "~> 0.9", [hex: :reactor, repo: "hexpm", optional: false]}, {:simple_sat, ">= 0.1.1 and < 1.0.0-0", [hex: :simple_sat, repo: "hexpm", optional: true]}, {:spark, ">= 2.2.22 and < 3.0.0-0", [hex: :spark, repo: "hexpm", optional: false]}, {:splode, "~> 0.2", [hex: :splode, repo: "hexpm", optional: false]}, {:stream_data, "~> 1.0", [hex: :stream_data, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.1", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e8dd3eb1f3aa45a75265c784df95ce261a3fad7f0d07400d316e981e14ed10f0"}, "ash_admin": {:hex, :ash_admin, "0.11.5", "24b5aeb2f7ec982031fd406ddf4ea6a9408defab43a9dfd55a3d7353c0a0a411", [:mix], [{:ash, "~> 3.0", [hex: :ash, repo: "hexpm", optional: false]}, {:ash_phoenix, "~> 2.1", [hex: :ash_phoenix, repo: "hexpm", optional: false]}, {:gettext, "~> 0.26", [hex: :gettext, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.7", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.20", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}], "hexpm", "1752d4828db977fe2cb85be12b6e572224e3627a5dce194b01b9fe66039dc9e0"}, "ash_appsignal": {:hex, :ash_appsignal, "0.1.3", "90c0ed1b3aedd18b892352d2a7632641f9ef8f2d3b04caec2bdc810cb8900524", [:mix], [{:appsignal, "~> 2.0", [hex: :appsignal, repo: "hexpm", optional: false]}, {:ash, "~> 3.0", [hex: :ash, repo: "hexpm", optional: false]}], "hexpm", "43b1691c9e83a27a355ee1d2c047a79e18adac99eb7e8f1a532feebfe2a07a14"}, - "ash_blog": {:git, "https://github.com/ash-project/ash_blog.git", "9f95eac8d7fbeb1afac74b11bf4b54c04b74960a", []}, + "ash_blog": {:git, "https://github.com/ash-project/ash_blog.git", "78f7a875299f6d143f65a8c5387ca9651dd2b3a5", []}, "ash_csv": {:hex, :ash_csv, "0.9.7", "179dba2b83ef74661ad8b9be81630fe88449c8ee4de84586816017962fc627f3", [:mix], [{:ash, "~> 3.0", [hex: :ash, repo: "hexpm", optional: false]}, {:csv, "~> 3.0", [hex: :csv, repo: "hexpm", optional: false]}], "hexpm", "32b11cb9708cc89065fb5c322ebd265fce3c7e8d70ac62bdbd12711d9b5dfcb8"}, "ash_graphql": {:hex, :ash_graphql, "1.3.4", "657f18124e6154b11c96d31716060dee6b7614ffc387fc1ba11ceea637436778", [:mix], [{:absinthe, "~> 1.7", [hex: :absinthe, repo: "hexpm", optional: false]}, {:absinthe_plug, "~> 1.4", [hex: :absinthe_plug, repo: "hexpm", optional: false]}, {:ash, ">= 3.2.3 and < 4.0.0-0", [hex: :ash, repo: "hexpm", optional: false]}, {:igniter, ">= 0.3.34 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:owl, "~> 0.11", [hex: :owl, repo: "hexpm", optional: false]}, {:spark, ">= 2.2.10 and < 3.0.0-0", [hex: :spark, repo: "hexpm", optional: false]}], "hexpm", "52c803ef848866d25a982baef632d459c71a1674ed0a1084da19980c3a28379a"}, "ash_json_api": {:hex, :ash_json_api, "1.4.7", "ced9c146e6e7a4ab2e9891efb133bcaaf031ac7b05541a41d549262af2988ee7", [:mix], [{:ash, "~> 3.3", [hex: :ash, repo: "hexpm", optional: false]}, {:igniter, ">= 0.3.14 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:json_xema, "~> 0.4", [hex: :json_xema, repo: "hexpm", optional: false]}, {:open_api_spex, "~> 3.16", [hex: :open_api_spex, repo: "hexpm", optional: true]}, {:plug, "~> 1.11", [hex: :plug, repo: "hexpm", optional: false]}, {:spark, ">= 2.2.10 and < 3.0.0-0", [hex: :spark, repo: "hexpm", optional: false]}], "hexpm", "a00f8657e2492d87d7e7e851302ee320af21f12fc104a49cace972c804df8f4a"}, diff --git a/priv/blog/published/2024-09-15-Ash-Framework-30.md b/priv/blog/published/2024-09-15-Ash-Framework-30.md new file mode 100644 index 0000000..0190c63 --- /dev/null +++ b/priv/blog/published/2024-09-15-Ash-Framework-30.md @@ -0,0 +1,61 @@ +--- +id: '618de7a0-4f27-44f5-b8bb-ddbe15cbe5d7' +tag_line: 'Released!' +tag_names: + - 'ash' + - 'elixir' + - 'release' +author: 'Zach Daniel' +body_html: '

__ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ Ash Framework 3.0: Official Release!__ash_blog_newline_hack__ __ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ I’m here with the fine folks at__ash_blog_newline_hack__ __ash_blog_newline_hack__ Gig City Elixir__ash_blog_newline_hack__ __ash_blog_newline_hack__ , pushing the button live on stage 😎__ash_blog_newline_hack__

__ash_blog_newline_hack____ash_blog_newline_hack__

__ash_blog_newline_hack__ The other packages around Ash will be updated with non-release candidate versions over the next few hours.__ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ What is changing?__ash_blog_newline_hack__ __ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ While there are far too many things to put them all here, I want to give those who haven’t been following along with our__ash_blog_newline_hack__ __ash_blog_newline_hack__ 3.0 teasers__ash_blog_newline_hack__ __ash_blog_newline_hack__ an idea of where the focus is for Ash 3.0. There are three themes that cover most of the changes:__ash_blog_newline_hack__

__ash_blog_newline_hack____ash_blog_newline_hack__

__ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ How do I upgrade?__ash_blog_newline_hack__ __ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ It is__ash_blog_newline_hack__ __ash_blog_newline_hack__ very important__ash_blog_newline_hack__ __ash_blog_newline_hack__ that you read and follow the__ash_blog_newline_hack__ __ash_blog_newline_hack__ upgrade guide__ash_blog_newline_hack__ __ash_blog_newline_hack__ ! You will need to go through it section by section and consider if there are changes from that section that you must make. Don’t forget that some packages have their own upgrade guides for breaking changes contained in that package. Links to those guides are at the top.__ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ What if I need help?__ash_blog_newline_hack__ __ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ If you encounter an issue or change that is not covered in the upgrade guide__ash_blog_newline_hack__ __ash_blog_newline_hack__ please__ash_blog_newline_hack__ __ash_blog_newline_hack__ contact us or open a PR to add to the guide. Even if it’s just a note reminding folks to look out for something that might be a gotcha. Every little bit helps :)__ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ Feel free to ask questions here on the forum if you need assistance!__ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ __ash_blog_newline_hack__ What about 2.x?__ash_blog_newline_hack__ __ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ Ash 2.x will receive a__ash_blog_newline_hack__ __ash_blog_newline_hack__ minimum__ash_blog_newline_hack__ __ash_blog_newline_hack__ of 6 months of critical bug fixes and security upgrades. Critical bug fixes include issues that have no reasonable workaround. Security upgrades includes things like updating potentially vulnerable packages, or fixing any issues related to policies, authentication, etc. We won’t be leaving folks in the dust, but it will absolutely be in your best interest to find a time in the next few months to upgrade, as there are many features in 3.0 to take advantage of and there are already more on the way!__ash_blog_newline_hack__

__ash_blog_newline_hack__

__ash_blog_newline_hack__ And don’t forget, the Ash book is coming! Keep an eye out for updates 🥳. Thanks again to @sevenseacat for all her fine work on this book, its coming along spectacularly.__ash_blog_newline_hack__

__ash_blog_newline_hack__' +inserted_at: '2024-09-15 03:19:38.366411Z' +updated_at: '2024-09-15 03:25:38.261533Z' +created_at: '2024-09-15 03:19:38.366411Z' +title: 'Ash Framework 3.0' +slug: 'ash-framework-30' +past_slugs: [] +state: 'published' +published_at: '2024-09-15 03:24:22.175307Z' +--- +# Ash Framework 3.0: Official Release! + +I'm here with the fine folks at [Gig City Elixir](https://www.gigcityelixir.com), pushing the button live on stage 😎 + + + +The other packages around Ash will be updated with non-release candidate versions over the next few hours. + +## What is changing? + +While there are far too many things to put them all here, I want to give those who haven't been following along with our [3.0 teasers](https://elixirforum.com/t/ash-3-0-teasers/61857/1) an idea of where the focus is for Ash 3.0. There are three themes that cover most of the changes: + +- **Security**: We want to make sure that Ash is safe and secure by default, and that it is free of foot guns that could lead to security issues, data consistency or other critical failures. Some examples of this are: + - [Actions no longer accept all public attributes by default](https://elixirforum.com/t/ash-3-0-teasers/61857/28) + - [All fields are now private by default](https://elixirforum.com/t/ash-3-0-teasers/61857/28#private-true-is-now-public-false-and-public-false-is-now-the-default-3) + - [Authorization is always done by default](https://elixirforum.com/t/ash-3-0-teasers/61857/22#domainauthorizationauthorize-now-defaults-to-by_default-2) + +- **Simplicity**: Ash is a huge ecosystem, and there is a lot to learn about how it works. Every confusing term and inconsistency increases the mental burden on developers, and increases the likelihood of bugs and wasted time. Some examples of this are: + - [`Ash.Api` is now `Ash.Domain`](https://elixirforum.com/t/ash-3-0-teasers/61857/22#domainauthorizationauthorize-now-defaults-to-by_default-2) + - [Not selected attributes show `%Ash.NotLoaded{}` instead of `nil`](https://elixirforum.com/t/ash-3-0-teasers/61857/28) + +- **Developer Experience**: With 2.x versions adding support for atomics and bulk actions, the core functionality of Ash is in a very good place. This gives us the time and mental cycles to devote to developer experience. While many of the 3.0 changes are focused on DX, we also expect to see a much greater focus on this moving forward! Some examples of this are: + - [Ash.ToTenant protocol](https://elixirforum.com/t/ash-3-0-teasers/61857/36) + - [Custom Expressions](https://elixirforum.com/t/ash-3-0-teasers/61857/28#custom-expressions-4) + - [Policies & Code Interfaces on the domain](https://elixirforum.com/t/ash-3-0-teasers/61857/30) + +## How do I upgrade? + +It is **very important** that you read and follow the [upgrade guide](https://hexdocs.pm/ash/3.0.0/upgrade.html)! You will need to go through it section by section and consider if there are changes from that section that you must make. Don't forget that some packages have their own upgrade guides for breaking changes contained in that package. Links to those guides are at the top. + +## What if I need help? + +If you encounter an issue or change that is not covered in the upgrade guide *please* contact us or open a PR to add to the guide. Even if it's just a note reminding folks to look out for something that might be a gotcha. Every little bit helps :) + +Feel free to ask questions here on the forum if you need assistance! + +### What about 2.x? + +Ash 2.x will receive a **minimum** of 6 months of critical bug fixes and security upgrades. Critical bug fixes include issues that have no reasonable workaround. Security upgrades includes things like updating potentially vulnerable packages, or fixing any issues related to policies, authentication, etc. We won't be leaving folks in the dust, but it will absolutely be in your best interest to find a time in the next few months to upgrade, as there are many features in 3.0 to take advantage of and there are already more on the way! + +And don't forget, the Ash book is coming! Keep an eye out for updates 🥳. Thanks again to @sevenseacat for all her fine work on this book, its coming along spectacularly. + + diff --git a/priv/blog/tags.csv b/priv/blog/tags.csv index eae0114..f121bdb 100644 --- a/priv/blog/tags.csv +++ b/priv/blog/tags.csv @@ -1,10 +1 @@ name -elixir -ash -macros -ash -community -elixir -ash -release -elixir diff --git a/priv/static/images/book-cover.jpg b/priv/static/images/book-cover.jpg new file mode 100644 index 0000000..bc49258 Binary files /dev/null and b/priv/static/images/book-cover.jpg differ diff --git a/priv/static/images/gig-city.jpg b/priv/static/images/gig-city.jpg new file mode 100644 index 0000000..d334e87 Binary files /dev/null and b/priv/static/images/gig-city.jpg differ